2017-03-19 31 views
0

我選擇了一個onTouch路徑並強制關閉它。然後,我裁剪路徑中的圖像,並重新繪製原始圖像的模糊版本。 但邊緣看起來非常尖銳。我希望模糊性能以越來越高的速度達到極限。Android:如何淡出任何形狀的封閉路徑?

void blurIt() { 
    if(path.isEmpty()) { 
     Toast.makeText(getContext(),"Selection is EMPTY",Toast.LENGTH_LONG).show(); 
     return; 
    } 
    Bitmap tmp = Bitmap.createBitmap(MainActivity.rawBitmap.getWidth(),MainActivity.rawBitmap.getHeight(),MainActivity.rawBitmap.getConfig()); 
    Canvas c = new Canvas(tmp); 
    paintRaw = new Paint(); 
    paintRaw.setAntiAlias(true); 

    c.drawPath(pathReal,paintRaw); 
    paintRaw.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 

    c.drawBitmap(MainActivity.rawBitmap,0,0,paintRaw); 

    canvas.drawBitmap(tmp,0,0,null); //blurred bitmap is set in canvas previously 

    setImageBitmap(MainActivity.blurBitmap); 
} 
+0

你需要兩個'Canvas'es嗎? – pskink

+0

本地一個用於創建裁剪部分,另一個用於繪製最終位圖 –

+0

使用BitmapShader和BlurMaskFilter代替 – pskink

回答

0

問題是由@pskink的幫助解決的。

void blurIt() { 
    if(path.isEmpty()) { 
     Toast.makeText(getContext(),"Selection is EMPTY",Toast.LENGTH_LONG).show(); 
     return; 
    } 
    Bitmap tmp = Bitmap.createBitmap(MainActivity.rawBitmap.getWidth(),MainActivity.rawBitmap.getHeight(),MainActivity.rawBitmap.getConfig()); 
    Canvas c = new Canvas(tmp); 
    paintRaw = new Paint(); 
    paintRaw.setAntiAlias(true); 
    paintRaw.setDither(true); 
    paintRaw.setStyle(Paint.Style.FILL); 
    BitmapShader shader = new BitmapShader(MainActivity.rawBitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP); 
    paintRaw.setShader(shader); 
    paintRaw.setMaskFilter(new BlurMaskFilter(20, BlurMaskFilter.Blur.NORMAL)); 
    c.drawPath(realPath,paintRaw); 
    setImageBitmap(tmp); 
}