这是我用来将图像保存到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);
}
}
我尝试使用不同的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 所以我不认为像素格式是这里的问题......
编辑(2013 年 3 月 8 日): 调用图片:
private class XyzAutoFocusCallback implements Camera.AutoFocusCallback {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if (takingPicture) {
camera.takePicture(null, null, myPictureCallback);
} else {
...
}
}