Android ApiDemos樣本解析(59):Graphics->ColorFilters發表於 2011 年 05 月 23 日 由 guidebee
本例ColorFilters和下例ColorMatrix 涉及到影像處理中的很多專業術語:
Dither(映像的抖動處理,當每個顏色值以低於8位表示時,對應映像做抖動處理可以實現在可顯示顏色總數比較低(比如256色)時還保持較好的顯示效果: Dither on Wikipedia
Porter Duff Color Filter 也可以為Alpha Composting,指當在將一幅映像繪製在已有背景映像時如果融合前景和背景顏色的過程。Porter Duffer 定義了多種模式,每種模式使用不同的前景和背景色組合演算法: Alpha Composting on Wikipedia
Android中的類PorterDuffColorFilter 定義了Port Duff Color Filter, 例子使用八種不同的顏色兩種模式: 其中顏色為0時,對應的colorFilter為null.
1234567891011121314 |
mColors = new int [] { 0 , 0xCC0000FF , 0x880000FF , 0x440000FF , 0xFFCCCCFF , 0xFF8888FF , 0xFF4444FF , }; mModes = new PorterDuff.Mode[] { PorterDuff.Mode.SRC_ATOP, PorterDuff.Mode.MULTIPLY, }; |
對於每個ColorFilter調用drawSample
123456789101112131415 |
private void drawSample(Canvas canvas, ColorFilter filter) { Rect r = mDrawable.getBounds(); float x = (r.left + r.right) * 0 .5f; float y = (r.top + r.bottom) * 0 .5f - mPaintTextOffset; mDrawable.setColorFilter(filter); mDrawable.draw(canvas); canvas.drawText( "Label" , x+ 1 , y+ 1 , mPaint2); canvas.drawText( "Label" , x, y, mPaint); for (Drawable dr : mDrawables) { dr.setColorFilter(filter); dr.draw(canvas); } } |
ColorFilter的效果可以從文字“Label”來看,兩行文字只位移了一個像素,有重疊來看ColorFilter的不同效果,對應SRC_ATOP和MULTIPLY兩種模式,文字有可以以白色和黑色顯示:
感覺文字Lable在MULTIPLY模式下”Label”有點“凹下”的效果。除了SRC_ATOP和MULTIPLY之外,PorterDuff.Mode還定義定義了10多種不同模式:
from
http://www.imobilebbs.com/wordpress/?p=1402