私はアンドロイドのカメラアプリに取り組んでいます。現在、jpeg コールバックでキャプチャを取得しています。キャプチャの生データを取得する方法があるかどうか知りたいです。キャプチャ用の生のコールバックがあることは知っていますが、常に null を返します。
したがって、jpeg コールバックから生データ (RGB ピクセルの連続) にアクセスできます。
編集 :
したがって、jpeg コールバックから生データ (YUV ピクセルの連続) にアクセスできます。
私はアンドロイドのカメラアプリに取り組んでいます。現在、jpeg コールバックでキャプチャを取得しています。キャプチャの生データを取得する方法があるかどうか知りたいです。キャプチャ用の生のコールバックがあることは知っていますが、常に null を返します。
したがって、jpeg コールバックから生データ (RGB ピクセルの連続) にアクセスできます。
編集 :
したがって、jpeg コールバックから生データ (YUV ピクセルの連続) にアクセスできます。
rk3288で実行されているAndroid 5.1で「生の」(YUV422)画像を正常に取得できました。
addRawImageCallbackBuffer
反射で呼び出すval weight = size.width * size.height * ImageFormat.getBitsPerPixel(ImageFormat.NV21) / 8
val bytes = ByteArray(weight);
val camera = android.hardware.Camera.open();
try {
val addRawImageCallbackBuffer = camera.javaClass
.getDeclaredMethod("addRawImageCallbackBuffer", bytes.javaClass)
addRawImageCallbackBuffer.invoke(camera, bytes)
} catch (e: Exception) {
Log.e("RNG", "Error", e);
}
...
camera.takePicture(null, { data, camera ->
val file = File("/sdcard/output.jpg")
file.createNewFile()
val yuv = YuvImage(data, ImageFormat.NV21, size.width, size.height, null)
yuv.compressToJpeg(Rect(0, 0, size.width, size.height), 80, file.outputStream())
}, null)
このCamera.takePicture()
メソッドは、2 番目のパラメーターとして raw のコールバックを受け取ります。
camera.takePicture ( shutterCallback, rawCallback, jpegCallback );
このコールバックはnull
、生の画像用のバッファーを最初に明示的に追加しない限り、byteArray を返します。
だから、あなたはcamera.addRawImageCallbackBuffer
この目的のために電話することになっています。
それにもかかわらず、このメソッドは利用できません (公開されていますが、エクスポートされていないため、直接呼び出すことはできません)。
さいわい、コード サンプルは、リフレクションによってこのメソッドを強制的に呼び出す方法を示しています。これにより、raw バッファーが一貫した yuv 画像をパラメーターとしてプッシュするようになります。