问题标签 [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 投票
1 回答
221 浏览

android - Android Renderscript设置邻居像素透明

我有一个脚本,可以清除某些颜色的像素。

我在 Java lile 中运行:

它有效,但我需要在 RenderScript 中具有特定颜色像素的清晰像素邻居?在饱和度中,我们处理每个像素,我不知道如何访问所有像素。

0 投票
1 回答
193 浏览

java - 如何计算传递给renderscript文件的数组

我想在 android 中创建一个渲染脚本,其中一个数组被传递给 .rs 文件。在这些值上进行一些计算并将其发送回用户。

我对渲染脚本的了解很少,所以我写的也可能完全错误。请帮帮我。

Android 活动 公共类 RenderTemp 扩展 Activity {

雪.rs

0 投票
2 回答
834 浏览

android - ScriptIntrinsicYuvToRGB 或 YUV420 分配被破坏?

我尝试使用 renderscript 中的 ScriptIntrinsicYuvToRGB 类进行 YUV 到 RGB 的转换,其中源为 YUV420 格式。我有 3 个原始平面,我从文件中读取并尝试将它们输入 YUV 类型的分配,然后通过 ScriptIntrinsicYuvToRGB.forEach 传递它。

它可以正确转换亮度(Y 平面),但在颜色上失败,因为色度通道似乎从 buf[w*h] 位置读取所有值 - 请参阅代码示例中的注释部分。当分配没有正确处理 UV 平面时,它看起来像错误。我假设是因为我在脚本中使用rsGetElementAtYuv_uchar_U分配函数进行了测试,并且它为任何坐标提供了相同的值(来自 buf[w*h])。

如果我可以进一步指定 YUV 格式(例如步幅/偏移等),我搜索了所有地方,但没有找到更多的设置Element.DataKind.PIXEL_YUVType.Builder.setYuvFormat(ImageFormat.YUV_420_888).

有人可以帮忙吗?

0 投票
2 回答
604 浏览

java - 在 RenderScript 中增加计数变量

我想使用以下 RenderScript 代码计算位图的像素

渲染脚本

文件名:counter.rs

爪哇

错误

这是我收到的错误消息:

错误:找不到计数的地址

问题

  • 为什么我的代码不起作用?
  • 我该如何解决?

链接

0 投票
1 回答
284 浏览

java - RenderScript:非致命 RS 错误,forEach 内核索引超出范围

我正在尝试运行一个简单的 RenderScript 示例,但出现以下错误:

导致此问题的代码是:

我的 RS 文件如下所示:

有谁知道上面的代码可能有什么问题?

谢谢!

0 投票
1 回答
377 浏览

android - 如何在 RenderScript 中声明本地/私有数组?

根据我的研究,我发现无法从 RenderScript 内部分配内存。例如,int* values = new int[10];在 C99 中是不允许的。我希望这个数组只对正在处理的当前像素是本地的,这样的动态分配将保证它是否是从内核函数内部声明和实例化的。

我知道这int values[10];是一个有效的声明。如果我把它放在 RenderScript 的开头,它就会变成一个全局数组,我们可以从 Java 代码中设置它(使用Allocation)。

我尝试放入int values[10];内核,我认为它是当前像素的本地。我知道声明一个单值变量(如 uint32_t、float4 等)绝对是当前像素的局部变量。然而,在内核中声明的数组仍然是一个全局变量——所有其他像素都可以读取和写入它。

如果您想知道,我想从当前像素 (x, y) 访问相邻像素。我已经能够做到这一点。但是,我需要将一些像素信息(比如每个相邻像素的颜色分量中的一个)存储在一个数组中,因为我可能需要挑选出最常出现的颜色分量,一旦该数组被排序,就需要准确的中间分量等. 所以,我正在尝试拉模式和中值过滤器,甚至是油画效果——所有这些都需要我将相邻像素数据存储在本地数组中。

那么,我们如何在 RenderScript 中声明一个本地/私有数组,只有当前正在处理的像素可以触摸呢?如果那不可能,我如何模拟需要仅具有单值变量的任务的本地数组?


更新

int values3[256];以上确实是当前线程的本地。事实证明,它可能包含我们不想要的垃圾值。我假设每个索引的值默认为 0。有些是,有些不是。这就是为什么我认为所有其他线程都在写它。我打算将上述内容作为计数,因此我并不总是按预期从 0 开始。这就是为什么我的计算是错误的!

0 投票
1 回答
182 浏览

renderscript - 如何使用 rsSetElementAt_type() 函数设置全局渲染脚本的值

在 Android 渲染脚本中:

一个内核可能不会有超过一个输入或一个输出分配。如果需要多个输入或输出,则这些对象应绑定到 rs_allocation 脚本全局变量,并通过rsGetElementAt_type()或从内核或可调用函数访问rsSetElementAt_type()

现在我知道该函数rsGetElementAt_type()需要三个参数:

但我不知道如何设置全局 rsSetElementAt_type() 的值

谁能告诉我这个函数采用什么参数以及按什么顺序?

我搜索了 android 文档和 google 但找不到

0 投票
1 回答
138 浏览

java - 处理 3D RenderScript 分配,z 属性不可用

背景

我正在尝试使用 RenderScript 对 3D 分配执行一些操作。

在这里我创建分配:

然后设置 Java 端并启动内核:

这就是内核的样子:

请注意,我需要两个不同的 RenderScript 上下文来并行执行,因此这就是我创建 RenderScript 对象的方式:

问题

我收到此运行时错误:

W/Adreno-RS:rsdSetupInputOutputAttributes:2051:输入参数的数量不正确,预期:2 实际 1

W/Adreno-RS: rsdScriptInvokeForEach:2511: 来自 rsdSetupInputOutputAttributes 的错误 -30

如果我不在根内核中插入 z 属性,问题就会消失。似乎 z 属性未被识别为特殊属性。

我的目标是 API 23,应该支持这个特殊属性。从文档:

映射核函数或归约核累加器函数可以使用特殊参数 x、y 和 z 访问当前执行的坐标,这些参数必须是 int 或 uint32_t 类型。这些参数是可选的。

您可以在Renderscript 上创建哪些可用的内核函数?2015 年 10 月 7 日,斯蒂芬·海因斯写道:

唯一自动填充的参数是 x、y(在 Android M 中可能还有 z)。

我不完全确定 API 级别 23 是否支持 z 属性,但至少 Android Studio 是这样认为的。

问题

  1. 难道我做错了什么?有没有办法在 API 级别 23 的内核中使用 z 属性?
  2. 如果不是,那么如果我不仅需要在 x 和 y 轴上以及沿 z 轴上迭代元素,那么实现这一点的最佳方法是什么?

预先感谢您的帮助。

附加信息

这是我的应用程序 build.gradle 的一部分:

0 投票
1 回答
2092 浏览

java - 如何在 Android camera2 中有效地将每个 YUV_420_888 帧转换为 RGB(例如,使用 renderscript yuv2rgb.rs)?

我正在使用 Android camera2 构建图像处理程序。由于每帧捕获的图像格式为YUV_420_888,因此我需要将其高效地转换为RGB进行图像处理。我google了很多,看了很多(尤其是下面两个链接),最后发现renderscript可能是解决方案。但是,我不知道如何在我的代码中使用 yuv2rgb 脚本。

http://werner-dittmann.blogspot.jp/2016/03/using-android-renderscript-to-convert.html

将 android.media.Image (YUV_420_888) 转换为位图

目前,我使用 TextureView 表面来显示预览,并使用 ImageReader 在 onImageAvailable 函数中捕获每个 YUV_420_888 帧。

如何更新我的代码以实现目标(例如,使用yuv2rgb.rs)?谢谢。

0 投票
1 回答
331 浏览

android-ndk - 用 NDK 超越 max_priority

我正在尝试在 Android 设备中复制一定程度的 RTOS 条件,而无需重新安装整个内核(就像 RTDroid 一样)。这些条件之一是确保关键线程在每次需要 CPU 或内存时优先于普通线程。

我了解使用 NDK 用 C/C++ 编写的代码是在 linux 内核级别执行的。这意味着它应该具有与 DVM 进程(Dalvik 虚拟机)相同的优先级。因此,我推断 C/C++ 代码的执行优先级高于在 DVM 上运行的任何“MAX_PRIORITY”线程。

我可以使用 Renderscript 复制相同的行为吗?我的直觉说不,因为 Renderscript 脚本中的执行主线程是由 Java 应用程序控制的。

提前感谢您提供的任何见解!