[英]Android renderscript for image blur using universal image loader
我想将下载的图像设置到我的图像视图中。 但我需要它作为模糊图像。 我使用了通用图像加载器。 所以我的问题是如何使用通用图像加载器和渲染脚本设置模糊图像? 谢谢你。
ImageLoader.getInstance().displayImage(QuickRepostApplication.getInstance().getImage(), main_image, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
float r = 25.0f;
Bitmap bitmap = Bitmap.createBitmap(
loadedImage.getWidth(), loadedImage.getHeight(),
Bitmap.Config.ARGB_8888);
RenderScript renderScript = RenderScript.create(MainActivity.this);
Allocation blurInput = Allocation.createFromBitmap(renderScript, loadedImage);
Allocation blurOutput = Allocation.createFromBitmap(renderScript, bitmap);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript,
Element.U8_4(renderScript));
blur.setInput(blurInput);
blur.setRadius(r);
blur.forEach(blurOutput);
blurOutput.copyTo(bitmap);
renderScript.destroy();
}
@Override
public void onLoadingCancelled(String s, View view) {
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
}
});
你可以试试这个方法 imageLoader.displayImage(images.get(position),child, options, new ImageLoadingListener() {});
使用返回位图的 UIL 回调方法,然后您可以根据需要模糊您的位图。 这是一个示例项目,可以帮助您模糊下载的图像。
我发现这篇文章很有帮助。 我也在这里提供主要代码以供快速参考,
public class BlurBuilder {
//Increase scailing to increase the blurring. Maximum value = 1f
private static final float BITMAP_SCALE = 0.4f;
//0 <= BLUR_RADIUS <= 25f
private static final float BLUR_RADIUS = 7.5f;
RenderScript rs;
public static Bitmap blur(Context context, Bitmap image) {
int width = Math.round(image.getWidth() * BITMAP_SCALE);
int height = Math.round(image.getHeight() * BITMAP_SCALE);
Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
if(rs == null)
rs = RenderScript.create(context);
ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
theIntrinsic.setRadius(BLUR_RADIUS);
theIntrinsic.setInput(tmpIn);
theIntrinsic.forEach(tmpOut);
tmpOut.copyTo(outputBitmap);
return outputBitmap;
}
}
这仅适用于 API 级别 >= 17。使用 UIL,像这样使用它:
imageLoader.displayImage(userImage, backImage, op, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
Bitmap blurredBitmap = BlurBuilder.blur(MyActivity.this, bitmap);
view.setBackgroundDrawable(new BitmapDrawable( getResources(), blurredBitmap ) );
}
@Override
public void onLoadingCancelled(String s, View view) {
}
});
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.