Android RenderScript高斯模糊


          今天看代碼的時候,看到了其中有.rs結尾的文件,不是很明白,還有RenderScript類,看的一臉矇蔽,不知所云,然後百度了一下,收貨還真不少,這東西在圖形處理這塊用處挺大的。

             今天先說說ScriptIntrinsicBlur,這個類不需要定義rs文件,從這個Intrinsic單詞可以看的出來,它是API17以後內置的類,專門用來處理圖像的,讓圖片變模糊。


public static Bitmap blurBitmap(Bitmap bitmap, float radius, Context context) {
        //創建渲染腳本上下文
        RenderScript rs = RenderScript.create(context);

        //爲位圖分配內存
        Allocation allocation = Allocation.createFromBitmap(rs, bitmap);

        Type t = allocation.getType();

        //用同樣的類型創建內存,一般用這兩種方式創建 Allocation
        Allocation blurredAllocation = Allocation.createTyped(rs, t);

        //創建高斯渲染腳本  
        ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        //設置模糊半徑 (maximum 25.0)
        blurScript.setRadius(radius);
        //爲腳本設置輸入參數 
        blurScript.setInput(allocation);
        //調用腳本 結果存入 blurredAllocation中
        blurScript.forEach(blurredAllocation);

        //把腳本結果存入位圖中  因爲爲native層渲染,所以結果需要複製到上層
        blurredAllocation.copyTo(bitmap);

        //Destroy everything to free memory
        allocation.destroy();
        blurredAllocation.destroy();
        blurScript.destroy();
        t.destroy();

        return bitmap;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章