事情远比这复杂。 SurfaceView 的背景不是相机预览。你必须有一个类来实现Camera.PreviewCalback
。一旦获得,您就可以获得一个包含预览发送的图像的字节数组。在某些手机上,您可以将预览设置为 JPEG,在这种情况下,您可以直接使用 BitmapFactory 对其进行解码。在不支持该功能的其他手机上,默认情况下您将获得 YUV 4:2:0 图像,您必须将其转换为 JPEG 图像。
在 Android 2.2+ 上,您可以将 YUV 图像转换为 JPEG,如下所示:
int w = params.getPreviewSize().width;
int h = params.getPreviewSize().height;
int format = params.getPreviewFormat();
YuvImage image = new YuvImage(data, format, w, h, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Rect area = new Rect(0, 0, w, h);
image.compressToJpeg(area, 50, out);
Bitmap bm = BitmapFactory.decodeByteArray(out.toByteArray(), 0, out.size());
ivCam.setImageBitmap(bm);
如果您的目标是较旧的模型,则必须使用类似此处的转换算法。
http://blog.tomgibara.com/post/132956174/yuv420-to-rgb565-conversion-in-android http://blog.tomgibara.com/post/132956174/yuv420-to-rgb565-conversion-in-android
一个SO来源:
在Android中从视频图像获取帧 https://stackoverflow.com/questions/1893072/getting-frames-from-video-image-in-android
EDIT:如果您只想显示相机视图,那么您只需添加SurfaceView
您的相机正在使用已经显示的布局,就像您在问题中所做的那样。它已经在显示它了。