Android RenderScript未正确渲染ScriptIntrinsicBlur,导致ScriptIntrinsicBlur渲染彩虹色
使用glide android库,我将图像获取为位图(),然后尝试使用renderscript和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.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;