2013-09-01 6 views
3

어떻게 RenderScript 내장 함수를 올바르게 사용합니까?RenderScript 내장 함수 가우시안 블러

//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 

http://android-developers.blogspot.com/2013/08/renderscript-intrinsics.html 내가 초기 레이아웃에 outputBitmap의 일부 검은 영역을 얻을 표시하지만, 같은

는 드로어 블은 자신을 "새로 고침"하고, 사용자가 스크롤 HorizontalScrollView의 스크롤러 후 채워 얻는다.

(도움이된다면) 내가 너무이 오류를 얻을 : 도움이 될 RS의 적절한 사용에 관한

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

제안.

enter image description here

답변

6

나는 문제가 높이너비가 인수의 순서를 전환했다는 것입니다 생각합니다. 다음과 같아야합니다.

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

난 당신이 UI 부분보다는 RS 부품 몇 가지 문제를 가지고 같은데요. RS 부품은 괜찮아 보입니다. RS 비트가 끝난 후에 outputBitmap.prepareToDraw()를 시도해보십시오.

그런데 중요한 경로에서 RS 컨텍스트를 만들고 파괴하는 것은 일반적으로 좋지 않습니다. 할당해야하는 하드웨어 리소스에 따라 잠재적으로 중요한 시작/제거 비용이 발생하므로 시작시 할당하고 응용 프로그램의 수명 동안 사용하는 것이 훨씬 낫습니다.