这是我用来将图像保存到的代码Bitmap.这段代码是基于CyanogenMod的相机应用程序的代码,所以我认为它会正常工作,但不是.关于这个问题最重要的一点是,在Nexus 4上进行测试时,Bitmap正在为使用后置摄像头拍摄的照片正确创建,但使用前置摄像头会产生下面的内容.
我用来创建的代码Bitmap:
private class XyzPictureCallback implements Camera.PictureCallback {
@Override
public void onPictureTaken (byte [] data, Camera camera) {
Options options = new Options();
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap image = BitmapFactory.decodeByteArray(data, 0, data.length, options);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同的Options(根本没有),但它没有帮助.它可能是由两个不同的相机返回的像素格式的东西但是当我跑的时候getSupportedPictureFormats()它们都返回ImageFormat.JPEG...
我的想法已经不多了......
我还应该提一下,data使用a直接保存FileOutputStream是创建一个合适的JPEG图像.所以问题必须与BitmapFactory我创建的方式一致Bitmap.
这是此代码生成的位图:

编辑(24.03.2013):
花了几个小时试图解决这个问题后,我仍然没有真正的解决方案.我发现的只是当我将图片尺寸(使用Camera.Parameters.setPictureSize(int width, int height))设置为我通过调用获得的前置摄像头可用的最高分辨率时才会出现问题Camera.Parameters.getSupportedPictureSizes().
导致问题的分辨率是1280x960.正如我之前提到的那样,这是最高分辨率.第二个最高的是1280x720,当我使用这个时,输出图片很好.我确实检查了相机吐出的格式,它一直是ImageFormat.JPEG所以我不认为像素格式是这里的问题...
编辑( 08.03.2013 ):致电拍摄图片:
private class XyzAutoFocusCallback …Run Code Online (Sandbox Code Playgroud) 我收到错误startPreview失败但不是所有设备.在摩托罗拉RAZR和三星Galaxy S3中,它运行良好.有些人告诉我他们在其他设备(Galaxy SII Lite,Galaxy Ace Duos,三星Galaxy Y等)中遇到同样的问题我试图在三星Galaxy Y中测试,这就是我在Logcat中得到的
java.lang.RuntimeException: startPreview failed
at android.hardware.Camera.startPreview(Native Method)
at br.com.timo.tubagram.CameraSurfaceView.surfaceCreated(CameraSurfaceView.java:47)
at android.view.SurfaceView.updateWindow(SurfaceView.java:601)
at android.view.SurfaceView.updateWindow(SurfaceView.java:413)
at android.view.SurfaceView.dispatchDraw(SurfaceView.java:358)
at android.view.View.draw(View.java:7083)
at android.view.SurfaceView.draw(SurfaceView.java:344)
at android.view.View.buildDrawingCache(View.java:6842)
at android.view.View.getDrawingCache(View.java:6628)
at android.view.ViewGroup.drawChild(ViewGroup.java:1571)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:7083)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
at android.view.View.draw(View.java:7083)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2108)
at android.view.ViewRoot.draw(ViewRoot.java:1540)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1276)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1878)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3770)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
at dalvik.system.NativeStart.main(Native Method) …Run Code Online (Sandbox Code Playgroud) 我正在创建一个相机应用程序.捕获时的图像显示在网格视图中.现在,代码在除三星设备之外的所有设备上都能正常工作.
我正面临着方向问题.当我以纵向模式拍摄图像时,图像在网格视图中显示时会旋转.我没有保留任何旋转代码.其次,使用EXIF我在网格视图中获得了正确的图像,但是当设备方向改变时,图像再次以旋转的方式旋转.
附加图片:


对不起图像的分辨率.请知道它们是否不正确.将再次上传.我知道SO上有很多这样的帮助.但我想我在某个地方被困住了.
我指的是以下链接:
http://blog.andolasoft.com/2013/06/how-to-show-captured-images-dynamically-in-gridview-layout.html
android screen-orientation android-camera android-camera-intent android-orientation
我正在尝试使用这里提出的camera2 api实现相机预览图像数据处理:使用Android L和Camera2 API进行相机预览图像数据处理.
我使用onImageAvailableListener成功接收回调,但是为了将来的处理,我需要从YUV_420_888 android.media.Image获取位图.我搜索了类似的问题,但没有一个帮助.
你能否建议我如何将android.media.Image(YUV_420_888)转换为Bitmap,或者有更好的方法来监听预览帧?
如何在我的应用中捕捉慢动作视频?
我试过用
mMediaRecorder.setVideoFrameRate(100);
Run Code Online (Sandbox Code Playgroud)
但如果我将值设置为20或更多,应用程序崩溃IllegalStateException.
我已经研究了很多.正常视频在24到30 fps之间.要看慢动作视频,我们需要捕获100-120 fps,但设备不允许这样.但是我看到设备中的默认摄像头有一个慢动作选项.游戏商店中的应用程序也很少允许创建慢动作视频.我也尝试设置更高setCaptureRate(),但也可以拍摄普通模式视频.在少数几个地方提到慢动作电影可以通过OpenCV/JavaCV图书馆完成,但我不明白如何使用这些库来捕获android中的慢动作视频?
我正在寻找帮助解决我使用Grafika的CameraCaptureActivity代码所面临的问题.我想构建一个可以记录相机并显示预览的应用程序,所以这个样本和代码看起来就像我想要的那样,到目前为止它很棒,这个问题appart.
我的问题是,当相机预览尺寸与GLSurfaceView我用于显示预览的确切尺寸不匹配时,它会显示拉伸预览.
以下是它的外观:
你可以看到它是水平拉伸的,因为音符表是一个完美的正方形.
用于在三星Galaxy S4这种精确为例,相机预览大小1280x720(从使用预览可用大小提取Camera2API),并且GLSurfaceView是1920x1080覆盖整个屏幕.
什么时候出现?
当SurfaceView与Camera输出相比进行放大时,即使我始终确保比率保持正确(1920x1080= 1.5*1280x720),也会出现此问题.
你用的是什么代码?
我使用Grafika的代码,包括:
有些日志?
这是SurfaceFlinger转储的样子:
Hardware Composer state (version 01030000):
mDebugForceFakeVSync=0
Display[0] configurations (* current):
* 0: 1080x1920, xdpi=442.450989, ydpi=439.351013, secure=1 refresh=16666667
numHwLayers=3, flags=00000000
type | handle | hint | flag | tr | blnd | format | source crop(l,t,r,b) | frame | dirtyRect | name
------------+----------+----------+----------+----+-------+----------+-----------------------------------+---------------------------+-------------------
HWC | b3b12ba0 …Run Code Online (Sandbox Code Playgroud) 我一直在使用谷歌的camera2 api演示,不幸的是,示例应用程序是为了在屏幕高度的大约70%处显示纹理视图预览,在环顾四周之后,我能够确定这是由AutoFitTextureView覆盖了onMeasure()方法如下图所示:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
if (0 == mRatioWidth || 0 == mRatioHeight) {
setMeasuredDimension(width, height);
} else {
if (width < height * mRatioWidth / mRatioHeight) {
setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
} else {
setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过设置正确的高度和宽度来纠正这个setMeasuredDimension(width, height);问题,这解决了高度问题,并从纹理视图中给我一个全屏预览,但是在每个设备上宽高比完全被破坏和翘曲,标准的固定方式是什么这个?我看到很多应用程序在Play商店找到了解决这个问题的方法,但还没能找到解决方案,任何帮助都会有很长的路要走,谢谢.
java android android-camera android-textureview android-camera2
我在Android 6.0中使用Camera2API.我在Android 5.0中没有错误地完成了.但是,当我在Android 6.0中使用我的代码时,我遇到了问题.问题是,有时我可以成功打开相机并拍照.但是,有时相机无法打开而且有错误
java.lang.SecurityException: Lacking privileges to access camera service
at android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:108)
Run Code Online (Sandbox Code Playgroud)
我添加了运行时权限,如下所示:
String[] PERMISSIONS = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(!hasAllPermissions(this, PERMISSIONS)){
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
}
public static boolean hasAllPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这都是日志
FATAL EXCEPTION: main
Process: com.example.camera2api, PID: 5376
java.lang.SecurityException: …Run Code Online (Sandbox Code Playgroud) android android-camera android-permissions android-6.0-marshmallow
我想对从相机获得的像素进行一些图像处理.
问题是来自相机的像素旋转了90度.
我得到方法内的像素 onPreviewFrame(byte[] data, Camera camera)
我试过camera.setDisplayOrientation(90);,它以正确的方向显示视频,但我仍然收到文档中所述的旋转像素:
这不会影响在Android.Hardware.Camera.IPreviewCallback.OnPreviewFrame(Byte [],Android.Hardware.Camera),JPEG图片或录制的视频中传递的字节数组的顺序.
我也尝试过:
parameters.setRotation(90);
camera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
但那没用.
我正在使用android 2.2

顶部图像显示使用时的SurfaceView camera.setDisplayOrientation(90);
第二个图像onPreviewFrame(byte[] data, Camera camera)从data数组中获取.如您所见,data阵列旋转.
我想实现一种功能,当有人试图解锁我的设备并输入错误密码3次时,通过前置摄像头捕获图像.我检查过它可以在Android中使用,某些应用程序也可以在Market中使用.
我已经做了一些工作来实现这一目标,但我得到了一个黑色的图像.这是代码:
注册设备管理员以获取广播的错误密码尝试:
public class DeviceAdminSample extends DeviceAdminReceiver {
static Context ctx;
static SharedPreferences getSamplePreferences(Context context) {
ctx = context;
return context.getSharedPreferences(
DeviceAdminReceiver.class.getName(), 0);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
System.out.println("Password Attempt is Failed...");
Intent i = new Intent(context, CameraView.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
Camera Class捕获图像并将其保存到SD卡:
public class CameraView extends Activity implements SurfaceHolder.Callback,
OnClickListener {
private static final String TAG = "CameraTest";
Camera mCamera;
boolean mPreviewRunning = false;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.e(TAG, …Run Code Online (Sandbox Code Playgroud) android android-intent android-camera android-camera-intent android-canvas
android ×10
android-camera ×10
bitmap ×2
grafika ×1
java ×1
opengl-es ×1
parameters ×1
preview ×1
slowmotion ×1
yuv ×1