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。也许您应该尝试使用它?