0

背景

我是 renderscript 的新手,我想尝试一些实验(但小实验,而不是我们在 SDK 中找到的复杂实验),所以我想了一个练习来尝试,这是基于上一个问题我的(使用NDK)。

我想做的事

简而言之,我想将位图数据传递给renderscript,然后我希望它将数据复制到另一个位图,其尺寸与前一个位图相反,这样第二个位图将是第一个位图的旋转.

举例说明:从此位图(宽度:2,高度:4):

01
23 
45
67

我希望它旋转(逆时针 90 度)到:

1357
0246

问题

我注意到,当我尝试更改根函数的签名时,Eclipse 给了我关于它的错误。

即使制作新功能也会产生新的错误。我什至尝试过在 Google 的博客(此处)上编写的相同代码,但我不知道他是如何创建他使用的函数的,以及为什么我无法更改过滤器函数以具有输入和输出位图数组。

为了自定义发送到 renderscript 的参数并使用其中的数据,我该怎么做?

可以不使用“过滤器”或“根”功能(API 11 及更高版本)吗?我该怎么做才能更灵活地了解我可以在那里做什么?

4

1 回答 1

1

你在这里问了一堆不同的问题,所以我将按顺序回答。1)您要旋转非方形位图。不幸的是,Renderscript 的位图模型不允许您轻松做到这一点。这样做的原因是输入和输出分配必须具有相同的形状(即相同数量的维度和这些维度的值,即使类型不同)。为了得到你想要的效果,你应该使用一个根函数,它只有一个新形状的输出分配(即输入列 X 输入行)。您可以创建一个 rs_allocation 全局变量来保存您的输入位图(然后您可以在 Java 端创建/绑定)。然后内核只需将输出单元设置为 rsGetElementAt(globalInAlloc, y, x) 的结果。

2) 如果您使用 API 11,则无法调整 root() 函数的签名(您可以将 NULL 分配作为输入传递,如果不使用它们,则在 Java 端输出)。在这些较旧的 API 级别上,您也不能为每个源文件创建超过 1 个内核,因此您被迫只有一个“root()”函数。如果您想为每个源文件使用更多内核,请考虑针对更高的 API 级别。

于 2013-01-21T18:05:49.327 回答