今天看代碼的時候,看到了其中有.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;
}