Android RenderScript未正确渲染ScriptIntrinsicBlur,导致ScriptIntrinsicBlur渲染彩虹色

Android RenderScript未正确渲染ScriptIntrinsicBlur,导致ScriptIntrinsicBlur渲染彩虹色,android,bitmap,imageview,renderscript,Android,Bitmap,Imageview,Renderscript,使用glide android库,我将图像获取为位图(),然后尝试使用renderscript和ScriptIntrinsicBlur(高斯模糊)模糊位图。() Glide.with(getApplicationContext()) .load(图像URL) .asBitmap() .into(新SimpleTarget(300200){ @凌驾 public void onResourceReady(位图资源、GlideAnimation){ RenderScript rs=RenderScr

使用glide android库,我将图像获取为位图(),然后尝试使用renderscript和ScriptIntrinsicBlur(高斯模糊)模糊位图。()

Glide.with(getApplicationContext())
.load(图像URL)
.asBitmap()
.into(新SimpleTarget(300200){
@凌驾
public void onResourceReady(位图资源、GlideAnimation){
RenderScript rs=RenderScript.create(mContext);//context=this。这是指活动
最终分配输入=Allocation.createFromBitmap(rs,resource,Allocation.MipmapControl.MIPMAP\u NONE,Allocation.USAGE\u脚本);
最终分配输出=Allocation.createTyped(rs,input.getType());
final ScriptIntrinsicBlur script=ScriptIntrinsicBlur.create(rs,Element.U8_4(rs));
脚本。setRadius(8f);
script.setInput(输入);
script.forEach(输出);
output.copyTo(资源);
setImageBitmap(资源);
}
});
问题在于这是输出,而不是模糊图像:


如有任何帮助,将不胜感激。:)

输入图像是否可能不是U8_4(即RGBA8888)?您能否从使用“Element.U8_4(rs)”改为使用“output.getElement()”?这样做可能是正确的。如果图像不是RGBA8888,您可能至少会得到一个Java异常,描述底层格式是什么(如果我们的Blur不支持这种格式)。

因为它只支持U8\u 4和U8格式。通过本例,在将位图发送到RenderScript之前,必须将其转换为ARGB_8888

        Bitmap U8_4Bitmap;
        if(sentBitmap.getConfig() == Bitmap.Config.ARGB_8888) {
            U8_4Bitmap = sentBitmap;
        } else {
            U8_4Bitmap = sentBitmap.copy(Bitmap.Config.ARGB_8888, true);
        }

        //==============================

        Bitmap bitmap = Bitmap.createBitmap(U8_4Bitmap.getWidth(), U8_4Bitmap.getHeight(), U8_4Bitmap.getConfig());

        final RenderScript rs = RenderScript.create(context);
        final Allocation input = Allocation.createFromBitmap(rs,
                U8_4Bitmap,
                Allocation.MipmapControl.MIPMAP_NONE,
                Allocation.USAGE_SCRIPT);

        final Allocation output = Allocation.createTyped(rs, input.getType());
        final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, output.getElement());
        script.setRadius(radius);
        script.setInput(input);
        script.forEach(output);
        output.copyTo(bitmap);
        rs.destroy();
        return bitmap;

这就是我得到的错误:“android.support.v8.renderscript.rsilegalargumentexception:未移植的元素类型。”感谢您的帮助:)好的。我解决了这个问题。Glide在RGB_565中加载位图。Glides有一个使用ARGB_8888的选项,但这仍然给了我同样的问题。感谢您的帮助。ScriptIntrinsicBlur不支持非RGBA_8888位图配置。但是@zinuzod有一个非常适合我的解决方案:sentBitmap.copy(Bitmap.Config.ARGB_8888,true);
        Bitmap U8_4Bitmap;
        if(sentBitmap.getConfig() == Bitmap.Config.ARGB_8888) {
            U8_4Bitmap = sentBitmap;
        } else {
            U8_4Bitmap = sentBitmap.copy(Bitmap.Config.ARGB_8888, true);
        }

        //==============================

        Bitmap bitmap = Bitmap.createBitmap(U8_4Bitmap.getWidth(), U8_4Bitmap.getHeight(), U8_4Bitmap.getConfig());

        final RenderScript rs = RenderScript.create(context);
        final Allocation input = Allocation.createFromBitmap(rs,
                U8_4Bitmap,
                Allocation.MipmapControl.MIPMAP_NONE,
                Allocation.USAGE_SCRIPT);

        final Allocation output = Allocation.createTyped(rs, input.getType());
        final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, output.getElement());
        script.setRadius(radius);
        script.setInput(input);
        script.forEach(output);
        output.copyTo(bitmap);
        rs.destroy();
        return bitmap;