编辑:我找到了解决方案。尽管它更像是一种奇怪的解决方法。答案如下。
我有两个Bitmap副本。其中一个变得模糊和扩大。另一个应该保持它原来的方式,但有些东西正在应用相同的模糊。我不太清楚问题是什么。
public static Bitmap blur(Bitmap image, float radius, int runs, Context context) {
if (null == image) return null;
Bitmap outputBitmap = Bitmap.createBitmap(image);
final RenderScript renderScript = RenderScript.create(context);
for (int x = 0; x < runs; x++) {
Allocation tmpIn = Allocation.createFromBitmap(renderScript, image);
Allocation tmpOut = Allocation.createFromBitmap(renderScript, outputBitmap);
//Intrinsic Gausian blur filter
ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
theIntrinsic.setRadius(radius);
theIntrinsic.setInput(tmpIn);
theIntrinsic.forEach(tmpOut);
tmpOut.copyTo(outputBitmap);
}
return outputBitmap;
}
这是我使用此功能的地方: bitmapS是一个,它应该保持不变,但它也会变得模糊。
bitmapS = bitmap;
bitmapHeight = bitmap.getHeight();
bitmapWidth = bitmap.getWidth();
int scale = Math.round((screenHeight / bitmapHeight) + 0.5f);
bitmapL = bitmap;
bitmapL = blur(bitmapL, 25f, 3, WallpaperService.this);
bitmapL = blur(
Bitmap.createScaledBitmap(bitmapL
, bitmapWidth * scale, bitmapHeight * scale, true),
25f, 1, WallpaperService.this);
答案 0 :(得分:0)
我仍然不知道导致问题的原因,但我找到了解决方法。
由于我想更多地模糊图像,我只是缩小了位图,然后模糊了它。然后我又把它缩放了。重新缩放似乎以某种方式解决了我的问题。
bitmapL = Bitmap.createScaledBitmap(bitmap, bitmapWidth / 3, bitmapHeight / 3, true);
bitmapL = blur(bitmapL, 25f, 2, WallpaperService.this);
bitmapL = blur(Bitmap.createScaledBitmap(
bitmapL, bitmapWidth * scaleL, bitmapHeight * scaleL, true),
25f, 1, WallpaperService.this);