Android的createBlurEffect方法采用哪种模糊算法?如何便捷测试?
Android RenderEffect.createBlurEffect 算法及测试方法
一、采用的模糊算法
RenderEffect.createBlurEffect() 使用的是高斯模糊(Gaussian Blur)。
从Android 12(API 31)引入该API时,底层实现就基于高斯模糊逻辑——它支持设置水平/垂直方向的模糊半径,还能通过TileMode控制边缘模糊处理方式,这些特性都和高斯模糊的特性匹配;而Box Blur是简单的均值模糊,无法实现这种精细化的模糊参数控制,效果也和该API的输出有明显区别。
二、便捷测试方法:获取处理后的Bitmap像素值
你可以通过Canvas绘制的方式,将模糊效果应用到测试Bitmap上,然后提取像素值验证结果,具体步骤和代码如下:
- 创建一个3x3的测试Bitmap,设置特定像素颜色(比如中心为红色,其余为白色,方便观察模糊扩散效果)
- 创建带模糊RenderEffect的Paint对象
- 将原Bitmap绘制到新的输出Bitmap上,应用该Paint
- 调用
getPixels()方法提取处理后的像素数组
示例代码(Kotlin)
// 1. 创建3x3的测试Bitmap val inputBitmap = Bitmap.createBitmap(3, 3, Bitmap.Config.ARGB_8888) val inputCanvas = Canvas(inputBitmap) inputCanvas.drawColor(Color.WHITE) // 中心像素设为红色(坐标1,1) inputBitmap.setPixel(1, 1, Color.RED) // 2. 创建模糊效果(半径设为1f,边缘采用CLAMP模式) val blurEffect = RenderEffect.createBlurEffect(1f, 1f, Shader.TileMode.CLAMP) val blurPaint = Paint().apply { renderEffect = blurEffect } // 3. 创建输出Bitmap并绘制应用模糊效果 val outputBitmap = Bitmap.createBitmap(3, 3, Bitmap.Config.ARGB_8888) val outputCanvas = Canvas(outputBitmap) outputCanvas.drawBitmap(inputBitmap, 0f, 0f, blurPaint) // 4. 获取并打印处理后的像素值 val pixelArray = IntArray(3 * 3) outputBitmap.getPixels(pixelArray, 0, 3, 0, 0, 3, 3) pixelArray.forEachIndexed { index, color -> val x = index % 3 val y = index / 3 println("坐标($x,$y) 的颜色值: ${String.format("#%08X", color)}") }
注意事项
- 该代码需要在API 31及以上的Android版本运行
- 可以调整模糊半径参数,观察像素值的变化,进一步验证高斯模糊的扩散规律
内容的提问来源于stack exchange,提问作者lyckanz
相关产品推荐
相关产品推荐

