У меня есть некоторые проблемы с RenderScript ScriptIntrinsic Blur - на некоторых устройствах он не размывает весь образ. Я уменьшаю входное изображение и слежу за тем, чтобы ширина была кратной 4 (потому что это предложил Роман Нурик: https://plus.google.com/+RomanNurik/posts/TLkVQC3M6jW)
@SuppressLint("NewApi")
private Bitmap blurRenderScript(Bitmap smallBitmap) {
Bitmap output = Bitmap.createBitmap(smallBitmap.getWidth(), smallBitmap.getHeight(), smallBitmap.getConfig());
RenderScript rs = RenderScript.create(getContext());
ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
Allocation inAlloc = Allocation.createFromBitmap(rs, smallBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_GRAPHICS_TEXTURE);
Allocation outAlloc = Allocation.createFromBitmap(rs, output);
script.setRadius(BLUR_RADIUS);
script.setInput(inAlloc);
script.forEach(outAlloc);
outAlloc.copyTo(output);
rs.destroy();
MutableBitmap.delete(smallBitmap);
return output;
}
Он работает с Nexus 4:
Но на Галактике S4 правая сторона имеет прозрачный край:
Надеюсь, вы поймете, что я имею в виду - если вы откроете картинку в gimp или вы увидите ее лучше. Это не зависит от размера изображения. Я также попробовал его с большими и меньшими изображениями, и результат всегда был одинаковым. Это также происходит на Nexus 7 2012, например. Кроме того, прозрачные артефакты иногда находятся на нижнем или левом краю. Заранее благодарим за помощь!
Nexus 4: 4.4.2/Номер сборки KOT49H Galaxy S4: 4.2.2/номер сборки JDQ39.I9505XXUDMGG