Android棒棒糖Camera.takePicture神器
Android Lollipop Camera.takePicture artifact
我在使用带有 Android 5.0.1 的 Nexus 5 时遇到了奇怪的问题。我有一个相机应用程序,它有捕获按钮,可以从 SurfacePreview 捕获帧并将其保存到文件:
public void takePicture(final Context context) {
PictureCallback pictureCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = StorageUtils.getOutputMediaFile(context, mIsForeside, null);
if (pictureFile == null) {
return;
}
InputStream is = new ByteArrayInputStream(data);
Bitmap bmp = BitmapFactory.decodeStream(is);
FileOutputStream out = null;
try {
out = new FileOutputStream(pictureFile);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (Exception e) {
} finally {
try {
out.close();
} catch (Throwable ignore) {
}
}
mOnPictureTakenListener.OnPictureTaken(pictureFile.getAbsolutePath());
}
};
mCamera.takePicture(null, null, pictureCallback);
}
此代码在 Nexus 5 运行 Android 4.4 上运行良好,但在 Android 5.0.1 的 Nexus 上我看到以下工件:
有人知道这个问题吗?
您是否尝试将数据字节数组保存到 JPEG 文件中,而不进行位图转换?
自android5,google引入新相机API。也许您应该尝试使用它?
我在使用带有 Android 5.0.1 的 Nexus 5 时遇到了奇怪的问题。我有一个相机应用程序,它有捕获按钮,可以从 SurfacePreview 捕获帧并将其保存到文件:
public void takePicture(final Context context) {
PictureCallback pictureCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = StorageUtils.getOutputMediaFile(context, mIsForeside, null);
if (pictureFile == null) {
return;
}
InputStream is = new ByteArrayInputStream(data);
Bitmap bmp = BitmapFactory.decodeStream(is);
FileOutputStream out = null;
try {
out = new FileOutputStream(pictureFile);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (Exception e) {
} finally {
try {
out.close();
} catch (Throwable ignore) {
}
}
mOnPictureTakenListener.OnPictureTaken(pictureFile.getAbsolutePath());
}
};
mCamera.takePicture(null, null, pictureCallback);
}
此代码在 Nexus 5 运行 Android 4.4 上运行良好,但在 Android 5.0.1 的 Nexus 上我看到以下工件:
有人知道这个问题吗?
您是否尝试将数据字节数组保存到 JPEG 文件中,而不进行位图转换?
自android5,google引入新相机API。也许您应该尝试使用它?