【问题标题】:Android masking with canvas drawing使用画布绘图的 Android 遮罩
【发布时间】:2016-03-18 20:58:08
【问题描述】:

我正在尝试通过在画布上绘制线条来创建蒙版。但是,当我完成图像时,它只是原始图像。如果我发送mask 位图,它会按预期显示并且原始图像是正确的。如何让遮罩在两个位图之间起作用?

@Override
public void onDraw(Canvas canvas) {
    if (lines == null) {
        return;
    }
    Bitmap mask = null;
    if(performMask) {
        mask = Bitmap.createBitmap((int)getWidth(), (int)getHeight(), Bitmap.Config.RGB_565);
        canvas = new Canvas(mask);
    }

    for (int i = 0; i < lines.size(); i++) {
        ArrayList<Point> line = lines.get(i);
        for (int j = 1; j < line.size(); j++) {
            Point start = line.get(j - 1);
            Point end = line.get(j);
            canvas.drawLine(start.x, start.y, end.x, end.y, drawingPaint);
        }
    }

    if(performMask) {
        performMask = false;

        Bitmap result = Bitmap.createBitmap(original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas tempCanvas = new Canvas(result);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        tempCanvas.drawBitmap(original, 0, 0, null);
        tempCanvas.drawBitmap(mask, 0, 0, paint);
        paint.setXfermode(null);
        if(maskPerformedListener != null) {
            maskPerformedListener.onMaskCompleted(result);
        }
    }
}

【问题讨论】:

    标签: android bitmap android-canvas mask


    【解决方案1】:

    我需要改变这一行

    mask = Bitmap.createBitmap((int)getWidth(), (int)getHeight(), Bitmap.Config.RGB_565);
    

    到

    mask = Bitmap.createBitmap((int)getWidth(), (int)getHeight(), Bitmap.Config.RGB_8888);
    

    事实证明你需要 alpha 层才能工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 2018-04-15
      • 2017-09-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多