【问题标题】:Convert YUV imageformat to PNG将 YUV 图像格式转换为 PNG
【发布时间】:2016-04-06 05:10:18
【问题描述】:

我正在努力在 Android 5.0.1 设备上将 YuvImage 转换为 png 图像格式,其中 png 显示为绿色图像。在 Android 5.1.1 上,这并没有发生,图像显示得很好。 一段时间后,我发现 Android 5.0.1 中存在一个错误,它使转换后的图像显示为绿色。这已在 Android 5.1.1 中修复

但是,有没有人知道一个解决方案,以便在没有得到此修复的设备上进行这项工作?

【问题讨论】:

  • 您使用的是 Camera 2 API 还是旧 API?
  • @silvaren 我正在使用 Camera 2 API

标签: android yuv


【解决方案1】:

我认为没有办法解决这个错误,因为根据我的经验,系统生成的图像已经是绿色的,而且转换为 PNG 不是问题。

我从评论回复中看到您正在使用 Camera 2 API,并且由于您使用的是 YUV 格式,我相信您正在尝试从相机的连续馈送中保存图像(而不是全分辨率图片拍摄)。如果是这种情况,我会建议尽可能使用较旧的 Camera API,因为我还没有看到在以 YUV 格式 (NV21) 捕获预览图像时无法工作的设备,它可以轻松转换为 PNG ,尽管必须经过 JPEG 步骤:

YuvImage yuvImage = new YuvImage(nv21bytearray, ImageFormat.NV21, width, height, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, os);
byte[] jpegByteArray = os.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegByteArray, 0, jpegByteArray.length);
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/imagename.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();

nv21bytearray 是旧相机 API onPreviewFrame(...) 方法返回的 NV21 字节数组。

【讨论】:

  • 添加了已弃用的相机 API。因此,只有使用 5.1.1 及更高版本的设备才会使用 Camera2 API。
  • 这不一定是一个好的选择,因为 JPEG 是有损压缩。您必须通过实现像素转换公式将 YUV 数据转换为 RGB,然后使用 Bitmap 类保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2017-05-11
  • 2023-03-05
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多