- view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE)) //RenderEffect | Android Developers (只支持gpu合成,不支持device合成,cpu会变高1%(100%)
- RenderScript:在Android中,可以使用RenderScript库来实现高斯模糊效果,这是Android官方提供的一种用于高性能计算的图形处理框架。下面是一个简单的步骤:
- 在build.gradle文件中,确保已经添加了RenderScript支持:
```groovy
android {
// ...
defaultConfig {
// ...
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
}
}
```
- 创建一个RenderScript文件(例如blur.rs),并添加以下代码:
```java
#pragma version(1)
#pragma rs java_package_name(com.example)
rs_allocation inputImage;
rs_allocation outputImage;
int radius;
void root(const uchar4* v_in, uchar4* v_out, const void* usrData, uint32_t x, uint32_t y) {
float4 sum = 0;
float4 currentPixel = rsUnpackColor8888(*v_in);
// 对周围像素进行高斯模糊处理
for (int i = -radius; i <= radius; i++) {
for (int j = -radius; j <= radius; j++) {
float4 neighborPixel = rsUnpackColor8888(rsGetElementAt_uchar4(inputImage, x + i, y + j));
sum += neighborPixel;
}
}
// 计算平均值并将结果写入输出图像
float4 blurredPixel = sum / ((2 * radius + 1) * (2 * radius + 1));
*v_out = rsPackColorTo8888(blurredPixel);
}
```3. 在你的Activity或Fragment中,创建一个方法来应用高斯模糊效果。以下是一个简单的示例代码:
private Bitmap applyGaussianBlur(Bitmap inputBitmap, float radius) {
// 创建输入和输出Bitmap对象
Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap.getWidth(), inputBitmap.getHeight(), inputBitmap.getConfig());
// 创建RenderScript上下文
RenderScript rs = RenderScript.create(this);
// 创建输入和输出Allocation对象
Allocation inputAllocation = Allocation.createFromBitmap(rs, inputBitmap);
Allocation outputAllocation = Allocation.createFromBitmap(rs, outputBitmap);
// 加载RenderScript脚本
ScriptC_blur blurScript = new ScriptC_blur(rs);
// 设置模糊半径
blurScript.set_radius((int) radius);
// 将输入图像分配给RenderScript脚本
blurScript.set_inputImage(inputAllocation);
blurScript.set_outputImage(outputAllocation);
// 执行RenderScript脚本
blurScript.forEach_root(inputAllocation, outputAllocation);
// 将结果写入输出Bitmap对象
outputAllocation.copyTo(outputBitmap);
// 释放资源
inputAllocation.destroy();
outputAllocation.destroy();
blurScript.destroy();
rs.destroy();
return outputBitmap;
}
可以使用`applyGaussianBlur`方法来对输入的Bitmap对象进行高斯模糊处理,返回一个模糊效果的Bitmap对象。记得在使用结束后释放相关资源,以避免内存泄漏