如何将NV21图像格式转换为位图?

6

我正在从相机获取预览数据,它是以NV21格式呈现的。我想将预览保存到SD卡中,即以位图形式保存。我的代码可以获取图像并保存,但在图库中捕获的预览只是黑色矩形。以下是代码。

    public void processImage() {

    Bitmap bitmap = null;

    if (flag == true) {

        flag = false;

        if (mCamera != null) {

            Camera.Parameters parameters = mCamera.getParameters();

            int imageFormat = parameters.getPreviewFormat();

            if (imageFormat == ImageFormat.NV21) {
                Toast.makeText(mContext, "Format: NV21", Toast.LENGTH_SHORT)
                        .show();
                int w = parameters.getPreviewSize().width;
                int h = parameters.getPreviewSize().height;

                YuvImage yuvImage = new YuvImage(mData, imageFormat, w, h,
                        null);

                Rect rect = new Rect(0, 0, w, h);

                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                yuvImage.compressToJpeg(rect, 100, baos);

                byte[] jData = baos.toByteArray();

                bitmap = BitmapFactory.decodeByteArray(jData, 0,
                        jData.length);
            }

            else if (imageFormat == ImageFormat.JPEG
                    || imageFormat == ImageFormat.RGB_565) {

                Toast.makeText(mContext, "Format: JPEG||RGB_565",
                        Toast.LENGTH_SHORT).show();
                bitmap = BitmapFactory.decodeByteArray(mData, 0,
                        mData.length);
            }
        }

        if (bitmap != null) {
            saveImage(bitmap);
            Toast.makeText(mContext, "Image Saved", Toast.LENGTH_SHORT)
                    .show();
        } else
            Toast.makeText(mContext, "Bitmap Null", Toast.LENGTH_SHORT)
                    .show();
    }
}

你找到解决办法了吗? - Antwan
1个回答

0
如果您想将NV21预览图保存到相册中以便查看,最简单的方法是从NV21字节数组创建一个YuvImage,然后将其压缩为JPEG格式并输出到文件流中,代码如下所示:
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/imagename.jpg");
YuvImage yuvImage = new YuvImage(nv21bytearray, ImageFormat.NV21, width, height, null);
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, fos);
fos.close();

请注意,您可能需要更改保存图像的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接