android renderscript ScriptIntrinsicColorMatrix setRGBtoYUV示例用法

时间:2017-05-31 08:16:57

标签: java android zxing renderscript android-renderscript

正如标题所说,如何使用ScriptIntrinsicColorMatrix将位图RGB转换回YUV byte []?下面是示例代码(zxing无法解码):

public byte[] getYUVBytes(Bitmap src, boolean initOutAllocOnce){    

    if(!initOutAllocOnce){
        outYUV = null;
    }
    if(outYUV == null){
        outYUV = Allocation.createSized(rs, Element.U8(rs), src.getByteCount());    
    }

    byte[] yuvData = new byte[src.getByteCount()];

    Allocation in;

    in = Allocation.createFromBitmap(rs, src,
            Allocation.MipmapControl.MIPMAP_NONE,
            Allocation.USAGE_SCRIPT);   

    scriptColor.setRGBtoYUV();

    scriptColor.forEach(in, outYUV);
    outYUV.copyTo(yuvData);

    return yuvData;
}

我注意到的一件事是从原始相机YUV字节是3110400字节但是在使用ScriptIntrinsicColorMatrix转换后变为8294400,我认为这是错误的。

YUV的原因 - > BW - > YUV是我想将图像转换为黑白(不是灰度)并返回YUV进行zxing解码,同时在surfaceview中显示黑白(如自定义相机滤镜)。

尝试下面的代码,但它有点慢(可以通过zxing解码)。

  int[] intArray  = null;
          intArray = new int[bmp.getWidth() * bmp.getHeight()];  
          bmp.getPixels(intArray, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight());  

          LuminanceSource source = new RGBLuminanceSource(cameraResolution.x, cameraResolution.y, intArray);
          data = source.getMatrix();

RGB到YUV的任何其他替代方案都很快吗?如果无法完成ScriptIntrinsicColorMatrix类?

请,谢谢

0 个答案:

没有答案