我想模糊位图的一个特定区域。例如,我有一个200x400分辨率的位图,想从中间模糊它,比如从100x300点到50点。有人有主意吗?
tkqqtvp11#
您可以使用**RenderScript**在Android中模糊位图。RenderScript对于执行图像处理、计算摄影或计算机视觉的应用尤其有用。我们可以通过两种方式访问Android RenderScript框架API:直接使用android.renderscript API类。这些类可从Android 3.0(API级别11)及更高版本获得。或者,您可以使用android.support.v8.renderscript支持包类。支持库类可用于运行Android 2.2(API级别8)及更高版本的设备。要使用支持库RenderScript API,您必须具有Android SDK工具修订版22.2或更高版本以及SDK构建工具修订版18.1.0或更高版本以下代码片段可用于在Android中使用RenderScript API创建位图模糊效果。
//Set the radius of the Blur. Supported range 0 < radius <= 25 private static final float BLUR_RADIUS = 25f; public Bitmap blur(Bitmap image) { if (null == image) return null; Bitmap outputBitmap = Bitmap.createBitmap(image); final RenderScript renderScript = RenderScript.create(this); Allocation tmpIn = Allocation.createFromBitmap(renderScript, image); Allocation tmpOut = Allocation.createFromBitmap(renderScript, outputBitmap); //Intrinsic Gausian blur filter ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript)); theIntrinsic.setRadius(BLUR_RADIUS); theIntrinsic.setInput(tmpIn); theIntrinsic.forEach(tmpOut); tmpOut.copyTo(outputBitmap); return outputBitmap; }
您可以使用上面的代码片段模糊ImageView,如下所示。
ImageView imageView = (ImageView) findViewById(R.id.imageView); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.nature); Bitmap blurredBitmap = blur(bitmap); imageView.setImageBitmap(blurredBitmap);
希望对你有帮助。
f3temu5u2#
渲染脚本无法在每个API级别中工作,因此请使用此库在图像https://android-arsenal.com/details/1/2192上产生模糊效果
jogvjijk3#
我使用了以下选项:1.从位图裁剪区域1.模糊裁剪区域1.**奖励:**从作物区域中切割出Cricle1.覆盖裁剪区域我在网上找到的功能:作物:
Bitmap cropImage = Bitmap.createBitmap(image, point.getX() - radius, point.getY() - radius, 2 * radius, 2 * radius);
模糊:
public static Bitmap blur(Bitmap image, int radius) { if (null == image) return null; Bitmap outputBitmap = Bitmap.createBitmap(image); final RenderScript renderScript = RenderScript.create(getMainActivity()); Allocation tmpIn = Allocation.createFromBitmap(renderScript, image); Allocation tmpOut = Allocation.createFromBitmap(renderScript, outputBitmap); //Intrinsic Gausian blur filter ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript)); theIntrinsic.setRadius(radius); theIntrinsic.setInput(tmpIn); theIntrinsic.forEach(tmpOut); tmpOut.copyTo(outputBitmap); return outputBitmap; }
获取圆圈:
public static Bitmap getCircularBitmap(Bitmap bitmap) { Bitmap output; if (bitmap.getWidth() > bitmap.getHeight()) { output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); } else { output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); float r = 0; if (bitmap.getWidth() > bitmap.getHeight()) { r = bitmap.getHeight() / 2; } else { r = bitmap.getWidth() / 2; } paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawCircle(r, r, r, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }
最终日期:
public static Bitmap blurPoint(Bitmap image, Point point, int radius) { Bitmap cropImage = Bitmap.createBitmap(image, point.getX() - radius, point.getY() - radius, 2 * radius, 2 * radius); Bitmap blurImage = blur(cropImage, 10); Bitmap circleImage = getCircularBitmap(blurImage); return putOverlay(image, circleImage, new Point(point.getX() - radius, point.getY() - radius)); }
我不知道这种方法的性能如何,但是我测试了在绘制模式下绘制这个模糊,没有延迟。
3条答案
按热度按时间tkqqtvp11#
您可以使用**RenderScript**在Android中模糊位图。
RenderScript对于执行图像处理、计算摄影或计算机视觉的应用尤其有用。我们可以通过两种方式访问Android RenderScript框架API:
直接使用android.renderscript API类。这些类可从Android 3.0(API级别11)及更高版本获得。或者,您可以使用android.support.v8.renderscript支持包类。支持库类可用于运行Android 2.2(API级别8)及更高版本的设备。
要使用支持库RenderScript API,您必须具有Android SDK工具修订版22.2或更高版本以及SDK构建工具修订版18.1.0或更高版本
以下代码片段可用于在Android中使用RenderScript API创建位图模糊效果。
您可以使用上面的代码片段模糊ImageView,如下所示。
希望对你有帮助。
f3temu5u2#
渲染脚本无法在每个API级别中工作,因此请使用此库在图像https://android-arsenal.com/details/1/2192上产生模糊效果
jogvjijk3#
我使用了以下选项:
1.从位图裁剪区域
1.模糊裁剪区域
1.**奖励:**从作物区域中切割出Cricle
1.覆盖裁剪区域
我在网上找到的功能:
作物:
模糊:
获取圆圈:
最终日期:
我不知道这种方法的性能如何,但是我测试了在绘制模式下绘制这个模糊,没有延迟。