如何通过camera.previewCallback操作来自摄像机的帧。我的代码占用帧并在每个帧中进行一些处理,但是我不知道如何向用户显示输出帧。
我在Google上搜索了很多,却没有找到解决方案。我尝试了许多自己的代码,但无法解决。
我尝试了下面的代码,它没有错误,但是在模拟器中运行应用程序时却什么也没发生。
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
int width = camera.getParameters().getPreviewSize().width;
int height = camera.getParameters().getPreviewSize().height;
// For bitmap
ByteArrayOutputStream out = new ByteArrayOutputStream();
// For export .jpeg image
File fileJpeg = new File(Environment.getExternalStorageDirectory().toString(), "test.jpeg");
File fileBitmap = new File(Environment.getExternalStorageDirectory().toString(), "test.png");
FileOutputStream outJpegFile = null;
FileOutputStream outBitmapFile = null;
try {
outJpegFile = new FileOutputStream(fileJpeg);
outBitmapFile = new FileOutputStream(fileBitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Convert NV21 bytes to YuvImage
YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, width, height, null);
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 80, out);
byte[] imageBytes = out.toByteArray();
final Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
Log.d(TAG, "onPreviewFrame: " + (image == null));
if (i[0] == 0){
yuvImage.compressToJpeg(new Rect(0, 0, width, height),80, outJpegFile);
image.compress(Bitmap.CompressFormat.PNG, 80, outBitmapFile);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
((ImageView) findViewById(R.id.view)).setImageBitmap(image );
}
});
这段代码中的所有内容运行都没有错误,我通过保存位图框架对其进行了测试,并且可以正常工作。
因此,现在我需要一个View类,可以在其上显示我的输出帧并为每个帧更新它。
如果有人可以帮助我,我将感谢他!
预先感谢。