これは、画像を .csv ファイルに保存するために使用する私のコードです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);
}
}
別のものを使用してみOptions
ましたが(まったく使用しませんでした)、役に立ちませんでした。2つの異なるカメラから返されたピクセル形式のものかもしれませんが、実行getSupportedPictureFormats()
すると両方とも返されましたImageFormat.JPEG
...
アイデアが尽きた…
data
を使用して を直接保存FileOutputStream
すると、適切な JPEG 画像が作成されたことにも言及する必要があります。したがって、問題は とBitmapFactory
の作成方法にあるに違いありませんBitmap
。
これは、このコードが生成するビットマップです。
編集 (24.03.2013):
これを修正するために何時間も費やした後でも、これに対する実際の解決策はまだありません。私が見つけたのは、画像サイズを(を使用してCamera.Parameters.setPictureSize(int width, int height)
)呼び出して取得した前面カメラで利用可能な最高の解像度に設定した場合にのみ問題が発生することCamera.Parameters.getSupportedPictureSizes()
です。
問題の原因となっている解像度は 1280x960 です。前述したように、これは最高の解像度です。2 番目に高いのは 1280x720 で、これを使用すると出力画像は問題ありません。カメラが吐き出すフォーマットを確認しましたが、それは常に ImageFormat.JPEG であるため、ここではピクセルフォーマットが問題ではないと思います...
編集 (2013 年 8 月 3 日): takePicture への呼び出し:
private class XyzAutoFocusCallback implements Camera.AutoFocusCallback {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if (takingPicture) {
camera.takePicture(null, null, myPictureCallback);
} else {
...
}
}