RenderScript Intrinsics Gaussian blur

Как правильно использовать RenderScript Intrinsics.

Как показано на странице http://android-developers.blogspot.com/2013/08/renderscriptintrinsics.html

//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 при первоначальной компоновке, но которые заполняются после того, как пользователь прокручивает Scroller of HorizontalScrollView, делая самозагружаемое «обновление».

Я тоже получаю эту ошибку (если это помогает):

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

Любые предложения относительно правильного использования RS помогут.

Введите описание изображения здесь

Я думаю, проблема в том, что вы изменили порядок аргументов высоты и ширины . Должен быть:

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

Я предполагаю, что у вас есть проблема с частями пользовательского интерфейса, а не с частями RS. Части RS выглядят прекрасно; Возможно, попробуйте outputBitmap.prepareToDraw () после завершения бит RS?

Обратите внимание, что в целом не рекомендуется создавать и уничтожать контексты RS на таком критическом пути. Существует потенциальная нетривиальная стоимость запуска / разрыва в зависимости от аппаратных ресурсов, которые должны быть выделены, поэтому было бы гораздо лучше выделить ее при запуске и использовать ее для срока службы приложения.