2016-03-18 18 views
0

Ich versuche, eine Maske durch Zeichnen von Linien auf einer Leinwand zu erstellen. Wenn ich jedoch mit dem Bild fertig bin, ist es nur das Originalbild. Wenn ich die mask Bitmap sende, zeigt es wie erwartet und das ursprüngliche Bild ist korrekt. Wie kann ich die Maskierung zwischen den zwei Bitmaps funktionieren lassen?Android Maskierung mit Leinwand Zeichnung

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

Antwort

1

Ich brauchte diese Linie

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

zu

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

Es stellte sich heraus Sie die Ebene arbeiten, um für diese Alpha ändern müssen.