首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Graphics-Xfermodes

2012-09-28 
Graphics-----Xfermodes1. Xfermode可以通过修改Paint的Xfermode来影响在Canvas已有的图像上面绘制新的颜

Graphics-----Xfermodes

1. Xfermode
可以通过修改Paint的Xfermode来影响在Canvas已有的图像上面绘制新的颜色的方式。
在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;如果它是部分透明的,那么它将会被染上下面的颜色。

下面的Xfermode子类可以改变这种行为:
AvoidXfermode? 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。

PixelXorXfermode? 当覆盖已有的颜色时,应用一个简单的像素XOR操作。

PorterDuffXfermode? 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互。

要应用转换模式,可以使用setXferMode方法,如下所示:

 AvoidXfermode avoid = new AvoidXfermode(Color.BLUE, 10, AvoidXfermode.Mode. AVOID);    borderPen.setXfermode(avoid); 



2. 16条Porter-Duff规则
?????????? 1.PorterDuff.Mode.CLEAR
?????????? 2.PorterDuff.Mode.SRC
?????????? 3.PorterDuff.Mode.DST
?????????? 4.PorterDuff.Mode.SRC_OVER
?????????? 5.PorterDuff.Mode.DST_OVER
?????????? 6.PorterDuff.Mode.SRC_IN
?????????? 7.PorterDuff.Mode.DST_IN
?????????? 8.PorterDuff.Mode.SRC_OUT
?????????? 9.PorterDuff.Mode.DST_OUT
?????????? 10.PorterDuff.Mode.SRC_ATOP
?????????? 11.PorterDuff.Mode.DST_ATOP
?????????? 12.PorterDuff.Mode.XOR
?????????? 13.PorterDuff.Mode.DARKEN
?????????? 14.PorterDuff.Mode.LIGHTEN
?????????? 15.PorterDuff.Mode.MULTIPLY
?????????? 16.PorterDuff.Mode.SCREEN

?

3.

// make a ckeckerboard pattern            Bitmap bm = Bitmap.createBitmap(new int[] { 0xFFFFFFFF, 0xFFCCCCCC,                                            0xFFCCCCCC, 0xFFFFFFFF }, 2, 2,                                            Bitmap.Config.RGB_565);            mBG = new BitmapShader(bm,                                   Shader.TileMode.REPEAT,                                   Shader.TileMode.REPEAT);            Matrix m = new Matrix();            m.setScale(6, 6);            mBG.setLocalMatrix(m);

?

?

4.

// draw the src/dst example into our offscreen bitmap                int sc = canvas.saveLayer(x, y, x + W, y + H, null,                                          Canvas.MATRIX_SAVE_FLAG |                                          Canvas.CLIP_SAVE_FLAG |                                          Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |                                          Canvas.FULL_COLOR_LAYER_SAVE_FLAG |                                          Canvas.CLIP_TO_LAYER_SAVE_FLAG);                canvas.translate(x, y);                canvas.drawBitmap(mDstB, 0, 0, paint);                paint.setXfermode(sModes[i]);                canvas.drawBitmap(mSrcB, 0, 0, paint);                paint.setXfermode(null);                canvas.restoreToCount(sc);

?
Graphics-Xfermodes

?

Graphics-Xfermodes

Graphics-Xfermodes

Graphics-Xfermodes

多谢,porter-duff的规则太多了,记不住,只能随用随查了

热点排行