相机图片到位图会导致图像混乱

Pau*_*aul 13 android bitmap android-camera

这是我用来将图像保存到的代码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 implements Camera.AutoFocusCallback {

            @Override
            public void onAutoFocus(boolean success, Camera camera) {
                    if (takingPicture) {
                            camera.takePicture(null, null, myPictureCallback);
                    } else {
                    ...
            }

}
Run Code Online (Sandbox Code Playgroud)

Siv*_*iva 0

尝试这个

Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
imv.setImageBitmap(bmp);

ByteArrayOutputStream bos = new ByteArrayOutputStream();
bmp.compress(CompressFormat.JPEG, 70, bos);
Run Code Online (Sandbox Code Playgroud)