使用canvas进行绘图时,可以通过使用BlendMode/PorterDuffMode将所绘制的图形的像素与Canvas中对应位置的像素按照一定的计算规则进行混合,形成新的像素值,从而更新Canvas中最终显示的像素颜色值。
当使用BlendMode时,需要将其作为参数传给Paint,即Paint.setBlendMode(BlendMode BlendMode)方法,这样在用该画笔Paint 进行绘图时,就会使用传入的BlendMode,如果不想再使用BlendMode,那么可以执行Paint.setBlendMode(null).
同时,鸿蒙还为提供了颜色的混合设置方式,即Canvas.drawColor(int color,BlendMode mode);或Canvas.drawColor(int color,Canvas.ProterDuffMode mode);两者显示效果相同。
如果想要查看完美的混合效果,需要遵循以下几点,不遵守以下注意点的会根据对应混合模式进行显示:
1、透明背景。这点需要特别注意,不满足该条件可能不会显示出想要的效果。
2、使用对象:PixelMap/Color/Paint
3、图像大小,图像大小决定原图像和目标图像的相交区域,这会对图像混合效果造成影响。
CLEAR | SRC | DST |
|
|
|
SRC_OVER | DST_OVER | SRC_IN |
|
|
|
DST_IN | SRC_OUT | DST_OUT |
|
|
|
SRC_ATOP | DST_ATOP | XOR |
|
|
|
PLUS | MODULATE | SCREEN |
|
|
|
OVERLAY | DARKEN | LIGHTEN |
|
|
|
COLOR_DODGE | COLOR_BURN | HARD_LIGHT |