Android RenderScript未生成输出

Android RenderScript未生成输出,android,renderscript,Android,Renderscript,我是Android上RenderScript的新手,我正在尝试设置RenderScript处理位图图像的最基本的“hello world”用法。这个最小的示例假定只将输出位图设置为纯色(红色),而忽略输入图像 这是从MainActivity调用的Kotlin代码 var rs=RenderScript.create(此) val脚本=脚本C_简单_效果(rs) val conf=Bitmap.Config.ARGB_8888 val宽度=2 val高度=2 val inbmp=Bitmap.cr

我是Android上RenderScript的新手,我正在尝试设置RenderScript处理位图图像的最基本的“hello world”用法。这个最小的示例假定只将输出位图设置为纯色(红色),而忽略输入图像

这是从MainActivity调用的Kotlin代码

var rs=RenderScript.create(此)
val脚本=脚本C_简单_效果(rs)
val conf=Bitmap.Config.ARGB_8888
val宽度=2
val高度=2
val inbmp=Bitmap.createBitmap(宽度、高度、形态)
val outbmp=Bitmap.createBitmap(宽度、高度、形态)
var inAllocation=Allocation.createFromBitmap(rs,inbmp)
var outAllocation=Allocation.createFromBitmap(rs,outbmp)
inAllocation.copyFrom(inbmp)
script.forEach_makeRed(inAllocation,OUTLOCATION)
outAllocation.copyTo(outbmp)
val像素=阵列(宽度*高度)
outbmp.getPixels(像素,0,outbmp.width,0,0,width,height)
下面是简单的渲染脚本代码

#pragma version(1)
#pragma rs java_package_name(com.xxxxx.yyyyy.zzzzz) // redacted

uchar4 RS_KERNEL makeRed(uchar4 in)
{
    uchar4 out;
    out.r = 255;
    out.g = 0;
    out.b = 0;
    out.a = 255;
    return out;
}
build.gradle在android defaultConfig部分包含以下内容

        renderscriptTargetApi 18
        renderscriptSupportModeEnabled true
我希望看到我的最终输出位图包含所有红色像素

实际结果是,当在模拟器中运行时,阵列中输出像素的所有整数都是0,或者当在实际设备上运行时,所有整数都是-1(0xFFFFFF)。我没有收到运行时错误或警告

我做错了什么?为什么我得不到输出

(您能从这段代码中看出吗?如果问题可能在其他地方,请告诉我可能需要哪些其他信息。)

编辑:更新 结果是,如果我在build.gradle中包括:

renderscriptSupportModeEnabled true 。。。然后它就不能正常工作了。输出为白色

但是,如果我删除
renderscriptSupportModeEnabled
声明,并将renderscript导入从
androidx.
更改为仅
android.
,则它的工作正常,输出为预期的红色

导入android.graphics.Bitmap
导入android.graphics.Color
导入android.os.Bundle
导入androidx.appcompat.app.appcompat活动
导入android.renderscript.Allocation
导入android.renderscript.renderscript

我不明白为什么。有人能解释一下吗?

应该是
outbmp.getPixels(像素,0,0,0,宽度,高度)
?偏移和跨步参数应该为零,因为您不想获取子集。我已经测试了您的代码,它工作正常,它生成了一个红色位图。此外,我还验证了getPixels返回的像素也是红色的。您可以在调试时自己检查它。在“copyTo”之后放置一个断点,在调试检查器中,您将看到位图对象旁边的“view”选项,该选项允许您在调试模式下预览实际位图。所以问题一定在其他地方,因为您的代码按预期工作。@MorrisonChang,如果我像您所示将stride参数设置为0,我会得到运行时错误:
java.lang.IllegalArgumentException:abs(stride)必须>=width
@PerracoLabs这是非常有用的信息!谢谢你的尝试。我的outbmp上的“查看”选项显示位图设置为全白色。我想我还有更多的调试要做。不确定下一步要看哪里。@Wyck这很奇怪,代码非常简单和直接。我所做的是创建一个全新的项目,复制/粘贴您的代码和脚本,它工作得非常完美。我尝试过gradle renderscript支持选项,但没有。在这两种情况下都能完美地工作。也许您应该尝试同样的方法,创建一个空项目,除了renderscript代码之外,没有其他任何东西。如果它有任何用处,我已经使用配置为Pixel3aAPI29的仿真器进行了测试。