0

当我在 camera.setPreviewCallback 上运行以下代码时,我得到一个静态图像。如何让 ImageView (iv) 正确显示?我需要在这里发布更多代码吗?请温柔一点,因为这是我在 stackoverflow 上的第一篇文章——而且,是的,我搜索了又搜索,但没有找到任何东西,所以如果你找到了已经提出问题的东西,在此先感谢。

YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, 300, 300, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0,0,300,300), 0, out);
byte[] imageBytes = out.toByteArray();
bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
iv.setImageBitmap(bitmap);

哦,是的,ViewPort 是 300x300。

我什至试过这段代码:

int[] imageBytes = convertYUV420_NV21toRGB8888(data, 300, 300);
bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);
bitmap.setPixels(imageBytes, 0, 300, 0, 0, 300, 300);

它使用stackoverflow上的功能之一。

4

1 回答 1

2

我找到了解决方案。宽度和高度不正确。尽管我将所有内容的大小设置为 300x300,但分辨率问题导致这不是所需的尺寸,所以这段代码终于奏效了:

Camera.Parameters parameters = camera.getParameters();

YuvImage im = new YuvImage(data, ImageFormat.NV21, parameters.getPreviewSize().width, parameters.getPreviewSize().height, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
im.compressToJpeg(new Rect(0,0,parameters.getPreviewSize().width, parameters.getPreviewSize().height), 100, out);
byte[] imageBytes = out.toByteArray();
bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, out.size());
iv.setImageBitmap(bitmap);
于 2013-01-14T18:09:48.557 回答