簡體   English   中英

三星 S9+ 和 RenderScript Intrinsics

[英]Samsung S9+ and RenderScript Intrinsics

我使用此腳本將 YUV_420_888 圖像轉換為 Bitmap。 在我的三星 S8 上一切正常。 我在我的 S9+ 上嘗試了 RenderScript,結果是黑色的 Bitmap。 沒有錯誤,沒有警告,只有黑色 Bitmap。 我將 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+ 在正確運行渲染腳本時存在一些問題。

似乎 S9+ 在我放置在 ImagView 上的 TextureView 存在問題。 刪除 TextureView 后,應用程序工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM