如何将图像用作脚本的分配

时间:2015-08-31 15:52:52

标签: android android-camera renderscript

我正试图从图像捕获中获取rgb值,我试图使用YuvToRGB内在函数来获取rgb值(我必须在yuv中捕获最快的捕获时间)。

到目前为止,我有:

RenderScript rs = RenderScript.Create(this);
Android.Renderscripts.Type.Builder tb = new Android.Renderscripts.Type.Builder(rs, Element.RGBA_8888);
tb.SetX(imageSheaf[i].Width);
tb.SetY(imageSheaf[i].Height);

Android.Renderscripts.Type t = tb.Create();
Allocation AllocateOut = Allocation.CreateTyped(rs, t, AllocationUsage.Script | AllocationUsage.IoOutput);


tb = new Android.Renderscripts.Type.Builder(rs, Element.CreatePixel(rs, Element.DataType.Unsigned8, Element.DataKind.PixelYuv));
tb.SetX(imageSheaf[i].Width);
tb.SetY(imageSheaf[i].Height);
tb.SetYuvFormat((int)Android.Graphics.ImageFormatType.Yuv420888);
Allocation allocateIn = Allocation.CreateTyped(rs, tb.Create(), AllocationUsage.Script);

ScriptIntrinsicYuvToRGB script = ScriptIntrinsicYuvToRGB.Create(rs, Element.RGBA_8888);

script.SetInput(allocateIn);

我无法解决的问题是如何将图像从imageReader输入allocateIn

2 个答案:

答案 0 :(得分:1)

我刚刚使用了ScriptIntrinsicYuvToRGB,以便将旧Camera(也是YUV)的预览图片转换为RGBA-Bitmap,并使用以下代码正常工作。 data是从捕获中获得的byte []数组。您需要使用copyFrom将数据切换到in-Allocation,并使用copyTo将输出切换到位图。 previewWidth和previewHeight是图片的尺寸。

    Bitmap bmpfoto1 = Bitmap.createBitmap(previewWidth, previewHeight,   Bitmap.Config.ARGB_8888);
    RenderScript  rs = RenderScript.create(this);
    ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic =     ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));

    Type.Builder yuvType = new Type.Builder(rs, Element.U8(rs)).setX(data.length);
    Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);
    in.copyFrom(data);

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

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

    out.copyTo(bmpfoto1);

答案 1 :(得分:0)

您可以直接使用http://developer.android.com/reference/android/renderscript/Allocation.html#createFromBitmap(android.renderscript.RenderScript,android.graphics.Bitmap)来创建输入分配。看看一些示例代码以及使用Allocation.copyFrom / Allocation.copyTo来实际进行正确的复制。