2016-10-21 70 views
1

我一直在使用ScriptIntrinsicBlur來模糊其中一個實際填充了一個SOLID COLOR的位圖。但是我得到的模糊效果真的不合適。請檢查下面的圖片。白色部分實際上是我模糊的位圖。位圖實際上用純色填充整個窗口。ScriptIntrinsicBlur生成不適當的模糊

enter image description here

下面是可用於模糊編碼。

static Bitmap blurBackground(Context context, int color, int width, int height){ 
    Log.d("AppLock","RENDER DONE in " + System.currentTimeMillis()); 

    Bitmap bitmap = Bitmap.createBitmap(200,200, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    canvas.drawColor(color); 
    canvas.save(); 

    Bitmap blurredBitmap = bitmap.copy(Bitmap.Config.ARGB_8888,true); 
    RenderScript renderScript = RenderScript.create(context); 

    Allocation inputAllocation = Allocation.createFromBitmap(renderScript,blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL 
      ,     Allocation.USAGE_SHARED); 
    Allocation outputAllocation = Allocation.createTyped(renderScript,inputAllocation.getType()); 

    ScriptIntrinsicBlur bluerScript = ScriptIntrinsicBlur.create(renderScript,Element.A_8(renderScript)); 
    bluerScript.setInput(inputAllocation); 
    bluerScript.setRadius(15f); 
    bluerScript.forEach(outputAllocation); 
    outputAllocation.copyTo(blurredBitmap); 
    bitmap.recycle(); 
    renderScript.destroy(); 
    Log.d("AppLock","RENDER DONE in " + System.currentTimeMillis()); 
    return blurredBitmap; 

} 

我已經從這裏Link To Tutorial

下面的教程我已經看過成無數的帖子在這裏,我意識到,我應該使用ARGB_8888用於渲染腳本。另外我嘗試將Element更改爲Element.U8_4()。但它所做的只是給我一個200x200像素的位圖,它實際上填滿了整個窗口。我不知道我做錯了什麼。幫助將不勝感激。

+0

我不明白。如果你模糊純色,你會得到純色。什麼意思?還是我誤解了一些東西? –

+0

@Saehun肖恩哦,我真的不明白模糊如何工作。我想從鏈接中的圖片獲得類似的效果。 http://imgur.com/5hxYziV –

回答

1

我認爲你所說的是調暗和模糊背景,而不是模糊一個純色。

嘗試下面這個教程:http://allegro.tech/2015/08/android-fogger.html

或跳轉到正確的庫:https://github.com/allegro/fogger

+0

感謝您的鏈接。這個對我來說很好看。 –

+0

抱歉沒有把詳細代碼放在這裏。我從來沒有使用這個庫,所以我不能告訴你這是如何工作的。很高興這有助於。 如果你有時間,你是否可以好好地張貼你的代碼作爲答案,即使鏈接被破壞,SO有答案?良好的做法來回答,但我正在工作大聲笑 –

+0

當然會發佈一次完成。圖書館看起來不錯,很好。感謝您的鏈接 –