RenderScript ScriptIntrinsic Blur にいくつか問題があります。一部のデバイスでは、画像全体がぼやけません。入力画像を縮小し、幅が 4 の倍数であることを確認します (Roman Nurik によって提案されているため: 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で動作しています:
ただし、Galaxy S4 では、右側に透明なエッジがあります。
私が言いたいことを理解していただければ幸いです。画像を gimp で開くと、よりよく見えます。画像サイズには依存しません。大きい画像と小さい画像でも試してみましたが、結果は常に同じでした。たとえば、Nexus 7 2012 でも発生します。また、透明なアーティファクトが下または左端にある場合があります。よろしくお願いします。
Nexus 4: 4.4.2/ビルド番号 KOT49H Galaxy S4: 4.2.2/ビルド番号 JDQ39.I9505XXUDMGG