问题描述
我是Android上的RenderScript的新手,我正在尝试建立最基本的“ hello world”类型的RenderScript用法来处理位图图像。这个最小的示例应该只是将输出位图设置为纯色(红色),而忽略输入图像。
var rs = RenderScript.create(this)
val script = ScriptC_simple_effect(rs)
val conf = Bitmap.Config.ARGB_8888
val width = 2
val height = 2
val inbmp = Bitmap.createBitmap(width,height,conf)
val outbmp = Bitmap.createBitmap(width,conf)
var inAllocation = Allocation.createFromBitmap(rs,inbmp)
var outAllocation = Allocation.createFromBitmap(rs,outbmp)
inAllocation.copyFrom(inbmp)
script.forEach_makeRed(inAllocation,outAllocation)
outAllocation.copyTo(outbmp)
val pixels = IntArray(width * height)
outbmp.getPixels(pixels,outbmp.width,width,height)
这是simple_effect渲染脚本代码
#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
我期望看到最终的输出位图包含所有红色像素。
实际结果是,在仿真器中运行时,输出像素IntArray的所有Ints均为0,而在实际设备上运行时,则均为-1(0xFFFFFFFF)。我没有运行时错误或警告。
我做错了什么?为什么我没有得到输出?
(您能从此代码中分辨出来吗?如果问题可能出在其他地方,请让我知道可能还需要其他信息。)
修改:更新
事实证明,如果我将其包含在build.gradle中:
renderscriptSupportModeEnabled true
...并且我使用这些导入:
import android.graphics.Bitmap
import android.graphics.Color
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.renderscript.Allocation
import androidx.renderscript.RenderScript
...,那么它无法正常工作。输出只是白色。
但是,如果我删除了renderscriptSupportModeEnabled
声明,并将渲染脚本导入从androidx.
更改为android.
,那么它可以正常工作,并且输出为达到预期的红色。
import android.graphics.Bitmap
import android.graphics.Color
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.renderscript.Allocation
import android.renderscript.RenderScript
我对为什么感到困惑。谁能解释?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)