gpt4 book ai didi

android - API 23 中遇到的 RenderScript 不稳定

转载 作者:太空狗 更新时间:2023-10-29 13:14:42 24 4
gpt4 key购买 nike

我的应用使用基于 RenderScript 的 Canny 边缘检测的专有实现。我在具有各种 API 的众多设备上测试了它,它工作得非常可靠。现在我得到了在 API23 上工作的新三星 S7。在这里(而且只有在这里)我遇到了一个相当丑陋的问题。一些边缘图片布满了数以千计的伪影,这些伪影源自幅度梯度计算内核,并非基于实际图像信息。在尝试了所有类型的 TargetAPI、打开和关闭 renderscript.support.mode 等之后,我终于发现只有在第二次或多次使用 RenderScript(和脚本)实例时才会出现问题。第一次使用时不会出现。

出于效率原因,我在 MainActivity 的 onCreate 方法中只创建了一次 RenderScript 和 Script 实例,然后重复使用它。我当然不想改变它。

有没有人能解决这个问题?谢谢。

更新:这里发生了疯狂的事情。似乎新创建的分配从一开始就不是空的!运行时:

    Type.Builder typeUCHAR1 = new Type.Builder(rs, Element.U8(rs));
typeUCHAR1.setX(width).setY(height);
Allocation alloc = Allocation.createTyped(rs, typeUCHAR1.create());

byte se[] = new byte[width*height];
alloc.copyTo(se);

for (int i=0;i<width*height;i++){
if (se[i]!=0){
Log.e("content: ", String.valueOf(se[i]));
}
}

... 字节数组 se 充满了有趣的数字... 帮助!知道这是怎么回事吗?

更新 2: 我在这里被自己的无知绊倒了 - 真的不值得为这部杰作加分......然而,为了我的辩护,我必须说这个问题稍微更微妙它出现在这里。上下文是,我需要分配一个全局分配(字节/U8),它最初应该是空的(即零),然后在内核中通过 rsSetElementAt_uchar() 部分设置为 1(仅在边缘所在的位置)。因为这工作了好几个月,我不再意识到我没有明确地在这个分配中分配零……这只对 API 23 有影响,所以也许这可以帮助其他人不陷入这个陷阱.... 所以,请注意:除了用 0 填充的数字数组(Java 默认情况下),分配不能假定在启动时全为零。谢谢,萨克里奇。

最佳答案

基本类型(非结构/对象)的分配数据在创建分配时默认不会初始化,除非使用 createFromBitmap api 传递位图。如果您预料到这一点,那么您的应用程序中可能存在错误,当驱动程序初始化为 0 时,该错误不会暴露。如果您可以发布重现问题的示例代码,将会有所帮助。

通过从位图或 Java 数组复制来初始化您的分配。

关于android - API 23 中遇到的 RenderScript 不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36230516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com