问题标签 [android-renderscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
762 浏览

background-image - 尝试模糊背景图像时,RenderScript No Class Def found

当试图模糊我想使用的图像时

所以我把它放在我的 build.gradle 文件中:

我使用这种方法来模糊图像:

但是代码在这一行崩溃了:

给出这个错误:

我不知道为什么,因为我从这里关注了所有内容:http: //developer.android.com/guide/topics/renderscript/compute.html

任何人都可以帮忙吗?

0 投票
1 回答
72 浏览

android - 计算任意大小的 3D 体积的推荐方法

提出我的问题:

我正在编写一个自定义卷积(用于 CNN),其中任意大小的 HxWxD 输入体积与 FxFxD 滤波器卷积。D 可以是 3 或 4,但也可以更多。我是 RenderScript 的新手,目前正在研究可能创建一个可以在未来使用的框架的方法,所以我不想最终以一种可能很快会弃用的方式使用 API。我现在的目标是 23,但可能需要在某个时候回到 18-19,这有待讨论。

看来,如果我定义一个 3D 分配并使用浮点作为内核中参数的类型,内核也会沿 Z 轴访问每个元素。像这样:

内核:

爪哇:

在 W=H=5 和 D=3 的情况下,3D 体积中有 75 个浮点数。运行程序会打印 75 个输出:

xy: {0.000000, 0.000000, 0.000000} xy: {1.000000, 0.000000, 0.000000} ... xy: {0.000000, 0.000000, 1.000000} xy: {1.000000, 0.000000, 1.

等等

该模式重复 3x25 次。

OTOH 参考不清楚 z 坐标,renderscript 的答案:访问“z”坐标表示不支持 z 坐标参数。

我还需要将过滤器绑定到内核中的 rs_allocation 变量。现在我有:

核心:

爪哇:

这似乎运作良好(没有编译或运行时错误)。但是有一个来自 2014 年的 SE 条目,它指出从版本 20 及以后的版本我们只能绑定一维分配,这与我的结果相矛盾。

那里有很多相互矛盾和过时的信息,所以我希望内部有人可以对此发表评论,并从可持续性和最优性的角度推荐一种方法。

(1) 我应该继续使用传递的 xyz 坐标来计算具有绑定 3D 分配的卷积吗?或者这种方法会在某个时候被弃用吗?

(2) 还有其他方法可以做到这一点,例如我可以将所有分配重塑为一维,将它们传递到内核并使用索引算法。这也将允许将某些值彼此靠近。另一种方法可能是将输入的 3D 体积细分为深度为 4 的块,并在类型中使用 float4。假设(1)可以使用,从优化的角度来看,与其他方法相比,使用(1)是否有缺点?

(3) 一般而言,是否存在理想的内存布局公式,例如,出于优化原因,将问题重新表述为 float3 或 float4 深度,而不是像 (1) 这样的“直截了​​当”的方法?

0 投票
2 回答
207 浏览

android - Renderscript 图像处理 Nexus 6 Marshmallow 问题

我正在使用渲染脚本进行实时图像处理(相机预览)。我在 Nexus 6 Marshmallow 6.1 上遇到问题,我的一些脚本不会运行超过几帧(rs 内核运行)。这些相同的脚本在 Nexus 4 Lollipop 5.1 上完美运行。

症状:脚本适用于多次运行(构建)。在第 n 次运行时,某些脚本停止按预期工作,并且所有后续运行都出现上述问题。我无法在导致问题的代码中建立某些特定操作。它看起来完全是随机的,至少从我能收集到的情况来看是这样。

我试过什么:

  • 重启手机、卸载应用程序、清理项目、使 Android Studio 中的缓存无效都不会产生任何结果。
  • rsDebug()根据这篇文章添加:
    RenderScript code not working without rsDebug 似乎已经解决了这个问题,但在几次构建后问题再次出现。
  • 添加rsDebug()代码并实际记录似乎可以按预期运行脚本,但不用说这不是解决方案,因为它会使脚本减速到停止。
  • 删除#pragma rs_fp_relaxed似乎已经解决了问题,但在几次构建后问题再次出现。
  • adb shell setprop debug.rs.default-CPU-driver 1解决了这个问题,但使用 renderscript 的重点是利用异构计算

我正在使用这个内核签名uchar4 __attribute__((kernel)) filter(uchar4 v_in, uint32_t x, uint32_t y),虽然RS_KERNEL会导致同样的问题。

感谢您的任何帮助和想法。

受影响代码示例:(来自此处的 Google 演示代码:https ://android.googlesource.com/platform/frameworks/rs/+/master/java/tests/ImageProcessing2/src/com/android/rs/image/ )

0 投票
1 回答
248 浏览

android - 是否可以在 RenderScript 内核中访问更多元素?[安卓]

我想从 RenderScript 中的一个分配中访问更多元素。让我们以谷歌的示例代码为例:

它需要一个 uchar4 ,它是分配的一个元素。是否可以访问和操作多个元素?就像展开一个循环,例如,来自位图的 8 个像素。

谢谢你。

0 投票
1 回答
442 浏览

android - 错误渲染脚本 Android Studio 2.0

今天,我收到了来自 Android Studio 的 2.0 版更新。更新完成后,我构建应用程序但在构建 gradle 中遇到错误消息

我正在搜索并通过替换找到解决方案

构建成功,但是当我运行应用程序时,应用程序崩溃显示 logcat :

代码过程模糊:

当我将 IDE 更新到 2.0 时出乎意料!

LZ,给我一些解决方案。谢谢大家!!!

0 投票
1 回答
383 浏览

android - RenderScript 不修改 alpha 通道?[安卓]

我正在使用 RenderScript 中的一个简单脚本。我必须从位图中修改像素上的 RGBA 值。经过多次尝试,我发现 Alpha 通道没有被修改。

我做了一些研究,发现了这个老问题,但我不明白这是如何发生的以及为什么会发生。是否有正确的方法来修改脚本上的 Alpha 通道?

这是我的代码的精简版本:

Java端:

RenderScript 方面:

我也尝试过内存绑定,但结果是一样的:

然后我从 java 端(在 forEach 之后)执行 copyTo,但 alpha 通道自动设置为 255

无论如何感谢您的支持。

- 更新 1:

我忘了提到我使用 getAbsolutePath() 从文件中获取位图,如下所示:

0 投票
1 回答
591 浏览

android - Android:渲染脚本错误 - 无法从位图更新分配,大小不匹配

我正在尝试从网络加载照片并对其执行模糊处理,将模糊图像输出为单独的位图。我的代码如下所示:

我得到了错误:

为什么会这样?

0 投票
0 回答
397 浏览

android - BCC 无法编译脚本

下午好,

我一直有一堆 Renderscript 脚本来实现精明的边缘检测。到目前为止,这一直完美无缺。

不幸的是,对于新设备(三星 Galaxy S7),所有脚本似乎都无法通过 bcc 编译。

我在 google tracker 和 SO 上进行了很多搜索,但没有改变所涉及的异常。我还尝试将我的 android 环境更新为最新配置,并尝试了几种 gradle 构建配置。不幸的是,我无法让它工作并且总是抛出同样的异常。

然后我开始认为它可能是实际的 C99 脚本,但它们的设置与我使用 Renderscript 的其他项目一样 - 实际上适用于三星 S7。

看起来很关键的错误消息是:

这会在 Android Java 层导致致命异常:

任何有关如何解决该问题的指导都将不胜感激。

非常感谢你的时间,

安东尼奥

0 投票
1 回答
264 浏览

android - 如何在渲染脚本中使用半精度?

我使用以下代码将浮点数数组传输到渲染脚本内核:

gInfoo.rs文件中定义如下:

我想使用 16 位浮点数。我知道我应该将分配创建更改为:

但是,我找不到将 bufName 数组复制到分配的解决方案。任何帮助表示赞赏。

0 投票
1 回答
216 浏览

android - 为什么将 Float4 对象传递给 RenderScript 内核会出错?

我使用以下过程将数字数组传输floatRenderScript 内核,它工作正常。

我想使用类似的过程来传输 Float4 值,如下所示

导致以下错误

传递的对象不是基元数组

显然,w应该是原语数组。但我想w成为Float4.