我有一个搜索栏,在搜索栏发生更改时,我运行此Async任务以使位图模糊;因此,基本上,当我将搜寻栏移至右侧位图时,其模糊程度应更高,而当移至左侧时,模糊度应较小。但是,当我开始移动时,即使将其向左移动,搜索栏位图也会越来越模糊,从而减小了模糊半径。从代码中可以看出,我从未更改过“ mainBitmap”,但是在调试应用程序时,我看到activity.mainBitmap有所更改,这就是为什么当搜索栏移动时逐渐使位图模糊的原因。
任何想法我在这里犯什么错误。
谢谢!
private final class Blur extends AsyncTask<Integer, Void, Bitmap> {
@Override
protected void onPreExecute(){
activity.showProgressBar();
}
@Override
protected Bitmap doInBackground(Integer... params) {
Bitmap bitmap = activity.mainBitmap;
Bitmap outputBitmap = Bitmap.createBitmap(bitmap);
RenderScript renderScript = RenderScript.create(activity);
Allocation tmpIn = Allocation.createFromBitmap(renderScript, bitmap);
Allocation tmpOut = Allocation.createFromBitmap(renderScript, outputBitmap);
//Intrinsic Gaussian blur filter
ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
theIntrinsic.setRadius(params[0]);
theIntrinsic.setInput(tmpIn);
theIntrinsic.forEach(tmpOut);
tmpOut.copyTo(outputBitmap);
return outputBitmap;
}
@Override
protected void onPostExecute(Bitmap newBit) {
activity.hideProgressBar();
activity.mainImage.setImageBitmap(newBit);
}
答案 0 :(得分:0)
您只是通过了reference
中的mainBitmap
,这就是mainBitmap
更改的原因。您应该对其进行复制,然后对其进行模糊处理。
代替
Bitmap bitmap = activity.mainBitmap;
您应该使用:
Bitmap bitmap = activity.mainBitmap.copy(activity.mainBitmap.getConfig(),true);
答案 1 :(得分:0)
与其在onSeekChange中为每个值一次又一次地创建位图, 这将通过OutOfMemoryException
按照此步骤 -创建一张完全模糊的图像 -在您的主图像上再添加一个图像视图,并将其上的模糊位图设置为叠加层,并将其alpha 0设置为完全透明。 -现在,当用户移动搜索栏时,尝试更改覆盖的模糊图像的Alpha。