可能是你需要的Android高效高斯模糊图片处理方法(Rende

2018-08-01  本文已影响21人  topone37

RenderScript是一种基于异构平台,高效计算的强大工具,尤其擅长图像,音频处理以及复杂的科学计算。RenderScript包括一个内核(kernel)编写语言和一组Java SDK。内核语言的语法类似C99标准,google为kernel提供了运行环境以及“标准库”。标准库主要提供了数学计算,向量/矩阵计算,以及一些OpenGL的功能(在4.2上已经被舍弃了),和log(调试用)。Java SDK让开发者在应用程序中管理RenderScript的整个lifecycle, 包括创建上下文,script对象,设置script全局变量,运行script等等。

上代码

public static Bitmap blurBitmap(Bitmap bitmap, float radius, Context context) {
    //Create renderscript
    RenderScript rs = RenderScript.create(context);
 
    //Create allocation from Bitmap
    Allocation allocation = Allocation.createFromBitmap(rs, bitmap);
    
    Type t = allocation.getType();
 
    //Create allocation with the same type
    Allocation blurredAllocation = Allocation.createTyped(rs, t);
 
    //Create script
    ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    //Set blur radius (maximum 25.0)
    blurScript.setRadius(radius);
    //Set input for script
    blurScript.setInput(allocation);
    //Call script for output allocation
    blurScript.forEach(blurredAllocation);
 
    //Copy script result into bitmap
    blurredAllocation.copyTo(bitmap);
 
    //Destroy everything to free memory
    allocation.destroy();
    blurredAllocation.destroy();
    blurScript.destroy();
    t.destroy();
    rs.destroy();
    return bitmap;

可以看到这个方法返回一个模糊了的bitmap。让我介绍一下上面代码中使用到的三个重要的对象:

上一篇下一篇

猜你喜欢

热点阅读