2013-09-01 172 views
3

如何正確使用RenderScript Intrinsics。如圖所示http://android-developers.blogspot.com/2013/08/renderscript-intrinsics.htmlRenderScript Intrinsics高斯模糊

//Assuming my original Bitmap is "bm" 
Bitmap outputBitmap = Bitmap.createBitmap(bm.getHeight(), 
bm.getWidth(), Config.ARGB_8888); 

RenderScript rs = RenderScript.create(getApplicationContext()); 
ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur 
.create(rs, Element.U8_4(rs)); 
Allocation tmpIn = Allocation.createFromBitmap(rs, bm); 
Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap); 
theIntrinsic.setRadius(25.f); 
theIntrinsic.setInput(tmpIn); 
theIntrinsic.forEach(tmpOut); 
tmpOut.copyTo(outputBitmap); 
bm.recycle(); 
rs.destroy 

我得到的初始佈局的outputBitmap的一些黑色區域,但

讓用戶滾動Horizo​​ntalScrollView的滾輪後填入,使得繪製「刷新」本身。

我得到這個錯誤太(如果它幫助):

09-01 05:54:11.246: E/RenderScript(11423): rsAssert failed: !mElements.size(), in frameworks/rs/rsElement.cpp at 375 

關於正確使用RS將幫助任何建議。

enter image description here

回答

6

我認爲問題在於你切換了高度寬度參數的順序。它應該是:

Bitmap outputBitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Config.ARGB_8888); 
3

我猜你已經有了與UI的部分,而不是RS部分的一些問題。 RS部件看起來不錯;也許在RS位完成後嘗試outputBitmap.prepareToDraw()?

請注意,通常在這樣的關鍵路徑中創建和銷燬RS環境並不是一個好主意。根據必須分配的硬件資源,可能存在一個不平凡的啓動/拆卸成本,因此在啓動時分配它並在應用程序的整個生命週期中使用它會更好。