三星S9 +和RenderScript内部

时间:2019-11-05 22:33:47

标签: java android c++ image-processing android-renderscript

我使用此脚本将YUV_420_888图像转换为位图。在我的三星S8上一切正常。我在S9 +上尝试了RenderScript,结果是一个黑色的位图。没有错误,没有警告,只是一个黑色的位图。我将S9 +更新为Android Pie,但一切仍为黑色。我真的无法解释S9 +设备出了什么问题...

        int W = mImage.getWidth();
        int H = mImage.getHeight();

        Image.Plane Y = mImage.getPlanes()[0];
        Image.Plane U = mImage.getPlanes()[1];
        Image.Plane V = mImage.getPlanes()[2];

        int Yb = Y.getBuffer().remaining();
        int Ub = U.getBuffer().remaining();
        int Vb = V.getBuffer().remaining();

        byte[] data = new byte[Yb + Ub + Vb];

        Y.getBuffer().get(data, 0, Yb);
        V.getBuffer().get(data, Yb, Vb);
        U.getBuffer().get(data, Yb + Vb, Ub);

        RenderScript rs = RenderScript.create(Main2Activity.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);

        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);

        final Bitmap bmpout = Bitmap.createBitmap(W, H, Bitmap.Config.ARGB_8888);

        in.copyFromUnchecked(data);

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

**编辑:**我将mImage的分辨率更改为2.960 x 1.440像素,并发生了一些崩溃。在应用崩溃时,我再次安装了该应用,而在崩溃时,该应用显示了位图。我认为问题不在于代码。我认为S9 +在正确运行渲染脚本时会遇到一些问题。

1 个答案:

答案 0 :(得分:4)

似乎S9 +在我放在ImagView上的TextureView上遇到了问题。删除TextureView之后,该应用程序运行良好。