0

私は Android を使用しCameraSurfaceViewおり、写真を撮る前にユーザーにプレビュー画像を表示しています。これは画面上では問題ないように見えますが、写真を撮ると、結果の jpg が破損しています (横線)。

出発点として、G2 で同じ問題を示すMark Murphy の Camera/Picture の例を使用しました。

カメラ パラメータ:

プレビュー サイズ: 800x480

画像フォーマット:JPEG

getSupportedPreviewSizes()およびに従って、両方のパラメータがサポートされます。getSupportedPictureFormats()

同じサイズの画面を持つ Nexus One は、同じパラメータで正しく動作します。

プレビュー サイズを 640x480 に設定すると、G2 は正しく動作します。

私の質問: 以前にこの問題に遭遇した人はいますか (サポートされている設定を使用しているにもかかわらず、画像が破損しています)? どのくらいの頻度ですか?どのように回避しましたか?

4

1 に答える 1

0

これまでのところ私は同じ問題を抱えていましたが、今では私を使用して修正することができました

setPictureFormat(ImageFormat.JPEG);

カメラのパラメーター設定。

最近、カメラのデフォルトの画像出力が YUV であることがわかりました。そのため、プレビューでは完全に表示されますが、写真を撮ると、緑やピンク、または破損した画像出力が得られます. これらは、カメラがサポートする可能性のある ImageFormat 値です。

JPEG = 256;
NV16 = 16;
NV21 = 17;
RAW10 = 37;
RAW_SENSOR = 32;
RGB_565 = 4;
UNKNOWN = 0;
YUV_420_888 = 35;
YUY2 = 20;
YV12 = 842094169;

したがって、サポートされているサイズ以外に、PictureFormat も確認する必要がある場合があります。

http://i.stack.imgur.com/PlHFH.png

これらは、ImageFormat YUV を使用して取得し、JPEG 圧縮として保存したサンプル画像です。

ただし、ImageFormat を変更したくないため、設定を YUV 形式のままにしておく場合は、次の回避策で画像を保存する必要があります。

Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
                    size.width, size.height, null);
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "YuvImage.jpg");
FileOutptStream filecon = new FileOutputStream(file);
image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 90,
                    filecon);
于 2015-03-17T14:58:45.930 に答える