Android 我可以将Renderscript上的输入和输出分配设置为不同的大小/维度吗? 背景
我正在学习Renderscript,所以我想尝试做一些我想做的简单操作 问题 我想到了旋转位图,这是一种非常简单的管理方法 在C/C++上,这是一件简单的事情(搜索“jniRotateBitmapCw90”): 问题是,当我在Renderscript上尝试此操作时,会出现以下错误: android.support.v8.renderscript.RSRuntimeException:维度不匹配 在参数ain和aout之间 我是这样做的: 卢比: 爪哇: 即使我将两个分配设置为相同大小(平方位图),并且我只是将输出设置为输入:Android 我可以将Renderscript上的输入和输出分配设置为不同的大小/维度吗? 背景,android,rotation,renderscript,Android,Rotation,Renderscript,我正在学习Renderscript,所以我想尝试做一些我想做的简单操作 问题 我想到了旋转位图,这是一种非常简单的管理方法 在C/C++上,这是一件简单的事情(搜索“jniRotateBitmapCw90”): 问题是,当我在Renderscript上尝试此操作时,会出现以下错误: android.support.v8.renderscript.RSRuntimeException:维度不匹配 在参数ain和aout之间 我是这样做的: 卢比: 爪哇: 即使我将两个分配设置为相同大小(平方位图
out[width * y + x] = in[width * y+x];
- 然后我得到的是一个有孔的位图。。。为什么
编辑:这是我的当前代码: RS uchar4属性((内核))旋转90cw(uint32\u t x,uint32\u t y){ //XY…X。。。 //…>..Y>..>Y。。 //……YX。。 uchar4 curIn=rsGetElementAt_uchar4(in,0,0); 返回curIn;//仅用于测试。。。 } 爪哇: 下面是:
int inX = ...;
int inY = ...;
uchar4 curIn = rsGetElementAt_uchar4(inAlloc, inX, inY);
*out = curIn;
这是因为您不能使用x和y参数来偏移输入和输出分配。这些输入/输出参数已经指向输入和输出中的正确(相同)位置。你正在做的索引是不必要的,也不是真正支持的。每次调用内核时,都会为分配中的1个元素位置调用它。这就是为什么作为参数提供时,输入和输出大小必须相同。这将解决您的问题 RS
rs\u分配*in;
uchar4属性((内核))旋转90cw(uint32\u t x,uint32\u t y){
...
uchar4 curIn=rsGetElementAt_uchar4(in,x,y);
返回库林;
}
1。美好的2.所以它一个接一个地迭代每个分配元素,以便每个“in”匹配每个“out”?3.“inAlloc”应该如何声明和使用(在RS和Java中)?4.我没想到会以这种方式看到几乎正确的位图表示。古怪的正确的应该是*out=*in,然后呢?1.:-)2.对请注意,它也是并行执行的,因此您不能假定任何序列化顺序。3.查看“使用内存”部分下的内容。4.这有点怪,但很可能是因为同步。传入的对分配位置(in/out)的引用不打算像这样编制索引,因此这不是不可能的。如果你想做一个90度的移动,你就不能向外*向外=*向内,因为那只是一个副本。1+2+3。好的,谢谢。我读过,但还是不知道怎么做。它们与结构无关,但与数组/位图数据无关。您是否还知道有一个网页显示了我可以使用的所有可用RS功能的列表(如您使用的“rsGetElementAt…”)?4.最后一个例子是试图将输出设置为与输入相同,这就是为什么我写了“…我只是将输出设置为输入”。我想看看是否至少可以将输出设置为与输入类似。也许你是指“int32_t*intPointer”的部分?rsGetElementAt_uchar4似乎不存在:“错误:没有匹配函数用于调用'rsGetElementAt_uchar4'”。为什么呢?很遗憾,我不知道如何使用Renderscript了,尤其是在Android Studio上。
out[width * y + x] = in[width * y+x];
rs_allocation *in;
mRenderScript = RenderScript.create(this);
mInBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_photo);
mOutBitmap = Bitmap.createBitmap(mInBitmap.getHeight(), mInBitmap.getWidth(), mInBitmap.getConfig());
final Allocation input = Allocation.createFromBitmap(mRenderScript, mInBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createFromBitmap(mRenderScript, mOutBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
ScriptC_test script = new ScriptC_test(mRenderScript, getResources(), R.raw.test);
script.bind_in(input);
script.forEach_rotate90CW(output);
output.copyTo(mOutBitmap);
mImageView.setImageBitmap(mOutBitmap);
int inX = ...;
int inY = ...;
uchar4 curIn = rsGetElementAt_uchar4(inAlloc, inX, inY);
*out = curIn;