2016-03-18 2 views
0

Я пытаюсь создать маску, рисуя линии на холсте. Однако, когда я заканчиваю изображение, это только оригинальное изображение. Если я отправлю растровое изображение mask, оно будет выглядеть так, как ожидалось, и исходное изображение верное. Как я могу заставить маскирование работать между двумя растровыми изображениями?Android masking with canvas drawing

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

ответ

1

мне нужно изменить эту строку

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

в

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

Оказывается, вам нужен альфа-слой для этой работы.