效率不是很够,数据量不大可以使用
public Bitmap convertYUV420_NV21toRGB8888_RenderScript(byte[] data, int W, int H) { RenderScript rs; ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic; rs = RenderScript.create(MyApplication.getAppContext()); yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs)); //Create an intrinsic for converting YUV to RGB. Type.Builder yuvType = new Type.Builder(rs, Element.U8(rs)).setX(data.length); Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT); //an Allocation will be populated with empty data when it is first created Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(W).setY(H); Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT); //an Allocation will be populated with empty data when it is first created in.copyFrom(data);//Populate Allocations with data. yuvToRgbIntrinsic.setInput(in); //Set the input yuv allocation, must be U8(RenderScript). yuvToRgbIntrinsic.forEach(out); //Launch the appropriate kernels,Convert the image to RGB. Bitmap bmpout = Bitmap.createBitmap(W, H, Bitmap.Config.ARGB_8888); out.copyTo(bmpout); //Copy data out of Allocation objects. return bmpout; }