我从一个库函数中获取了类型为byte[]
、格式为RGBA、大小为640x480、每个像素4个字节的原始相机数据rawData
。我需要将其转换为位图并在屏幕上的ImageView中显示。
我的做法如下:
byte[] JPEGData = convertToJpeg(rawData, 640, 480, 80);
Bitmap bitmap = BitmapFactory.decodeByteArray(JPEGData , 0, JPEGData .length);
imageView.setImageBitmap(bitmap);
其中 convertToJpeg()
函数是:
public static byte[] convertToJpeg(byte[] buffer, int w, int h, int quality) {
YuvImage yuv_image = new YuvImage(buffer, ImageFormat.NV21, w, h, null);
Rect rect = new Rect(0, 0, w, h);
ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
yuv_image.compressToJpeg(rect, quality, output_stream);
Bitmap sourceBmp = BitmapFactory.decodeByteArray(output_stream.toByteArray(), 0, output_stream.size());
Bitmap destBmp = Bitmap.createScaledBitmap(sourceBmp, (int) (w * 0.75), (int) (h * 0.75), true);
ByteArrayOutputStream pictureStream = new ByteArrayOutputStream();
destBmp.compress(CompressFormat.JPEG, quality, pictureStream);
byte[] pictureByteArray = pictureStream.toByteArray();
return pictureByteArray;
}
decodeByteArray()
调用后,我的bitmap.getConfig() == ARGB_8888
。然而,我在屏幕上看到的是一些混乱的图片,有一些模糊的绿色形状,但它们与原始图片相比不符。
这是怎么回事?
(imageView.setBitmap(bitmap));
。我该怎么办? - Alexander Shmuratkobyte[] buffer
应该转换为 ARGB 格式。我认为compressToJpeg
期望得到一个 ARGB 格式。 - Simon Marquis