小编Yam*_*gut的帖子

使用新的Android camera2 api从YUV_420_888进行JPEG编码时的绿色图像

我正在尝试使用新的相机api.突发捕获速度太慢,因此我在ImageReader中使用YUV_420_888格式并稍后进行JPEG enconding,如以下帖子中所示:

Android camera2捕获突发太慢了

问题是当我尝试使用RenderScript从YUV_420_888编码JPEG时,我得到绿色图像,如下所示:

RenderScript rs = RenderScript.create(mContext);
ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(rs));
Type.Builder yuvType = new Type.Builder(rs, Element.YUV(rs)).setX(width).setY(height).setYuvFormat(ImageFormat.YUV_420_888);
Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);

Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height);
Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);

in.copyFrom(data);

yuvToRgbIntrinsic.setInput(in);
yuvToRgbIntrinsic.forEach(out);

Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
out.copyTo(bmpout);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmpout.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] jpegBytes = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

数据变量(YUV_420_888数据)来自:

ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
Run Code Online (Sandbox Code Playgroud)

我在JPEG编码中做错了什么才能使图像只显示为绿色?

提前致谢

编辑:这是我获得的绿色图像的示例:

https://drive.google.com/file/d/0B1yCC7QDeEjdaXF2dVp6NWV6eWs/view?usp=sharing

rgb android yuv android-camera android-5.0-lollipop

10
推荐指数
1
解决办法
5707
查看次数

标签 统计

android ×1

android-5.0-lollipop ×1

android-camera ×1

rgb ×1

yuv ×1