Composite operations in Android Canvas

后端 未结 3 2134
青春惊慌失措
青春惊慌失措 2021-02-09 07:18

I\'m just starting with Android development and I\'m coming from JavaScript/HTML world so I\'m currently investigating the possibilities of the Android SDK.

The HTML 5 c

相关标签:
3条回答
  • 2021-02-09 07:45

    I haven't looked into doing those kinds of operations before, but I think there's a way to do them using the Rect shape. You can define rectangles to mark out which areas should be drawn into the canvas, or which to take out of the source image, and the Rect class has some comparison features built-in. For example to imitate a source-in, you could use setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination) to make your new rectangle only have the intersected area of the two images. Then you can use that rectangle as an argument in one of the Canvas's draw commands, telling it to only take the pixels from the source image that are inside that rectangle. You then control the drawing in the Z-axis by the order in which the draw commands are executed.

    0 讨论(0)
  • 2021-02-09 07:45

    Found it myself. The PorterDuffXfermode implements all these composite modes.

    0 讨论(0)
  • 2021-02-09 07:56

    Composition is handled by drawing on a Canvas with a Paint that uses a PorterDuffXfermode.

    Paint p=new Paint();
    p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
    canvas.drawBitmap(bitmap, 0, 0, p);
    

    See here for more info. I also managed to override onPaint so that we can apply this composition to elements that draw themeselves.

    0 讨论(0)
提交回复
热议问题