我正在尝试在表面视图上捕获相机的预览,以将其保存为内部存储器中的 JPEG。我在这个网站上找到了一些代码,这主要是我想要的,但将图像保存到 SD 卡。我改变了它,并提出了以下代码。
Camera.PreviewCallback mPrevCallback = new Camera.PreviewCallback()
{
@Override
public void onPreviewFrame( byte[] data, Camera Cam ) {
//Log.d(TAG, "FRAME");
Camera.Parameters parameters = Cam.getParameters();
int format = parameters.getPreviewFormat();
//Log.d(TAG, "FORMAT:" + format);
//YUV formats require more conversion
if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) {
int w = parameters.getPreviewSize().width;
int h = parameters.getPreviewSize().height;
// Get the YuV image
YuvImage yuv_image = new YuvImage(data, format, w, h, null);
// Convert YuV to Jpeg
Rect rect = new Rect(0, 0, w, h);
ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
yuv_image.compressToJpeg(rect, 100, output_stream);
byte[] byt = output_stream.toByteArray();
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream("/data/data/com.example.max.camtest/files/test"+System.currentTimeMillis()+".jpg");
outStream.write(byt);
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
};
在surfaceview上显示预览并触发mPrevCallback。它成功保存了不同大小(250~500Kb)但都是黑色的图片。当我尝试使用 camera.takePicture 功能拍摄照片时,它也是黑色的。
我究竟做错了什么?我该如何调试呢?谢谢!