Android Lollipop Camera.takePicture神器

时间:2015-01-16 09:14:37

标签: android android-5.0-lollipop artifacts

我在使用Nexus 5和Android 5.0.1时遇到了奇怪的问题。我有一个相机应用程序,它有捕获按钮,从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);
}

此代码适用于运行Android 4.4的Nexus 5,但在使用Android 5.0.1的Nexus上,我看到以下工件:

Photo with artifact

有谁知道这个问题?

1 个答案:

答案 0 :(得分:1)

您是否尝试将数据字节数组保存为JPEG文件,而不进行位图转换?

自Android 5以来,谷歌推出了新的相机API。可能你应该尝试使用它吗?