Android:如何淡出任何形状的封闭路径?

时间:2017-03-19 15:33:51

标签: android

我在onTouch上选择一条路径并强行关闭它。然后我在路径中裁剪图像并将其重绘在原始图像的模糊版本上。 但边缘看起来非常锋利。我希望模糊性能够以越来越高的速度向外发展。

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);
}

1 个答案:

答案 0 :(得分: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);
}