Graphics->ColorFilters

本文深入探讨了图像处理技术及其在实现视觉特效中的应用,包括抖动处理、颜色过滤、模式融合等核心概念,并通过实例展示了不同颜色模式下的效果差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mColors = new int [] {
  0 ,
  0xCC0000FF ,
  0x880000FF ,
  0x440000FF ,
  0xFFCCCCFF ,
  0xFF8888FF ,
  0xFF4444FF ,
};
 
mModes = new PorterDuff.Mode[] {
  PorterDuff.Mode.SRC_ATOP,
  PorterDuff.Mode.MULTIPLY,
};

对于每个ColorFilter调用drawSample

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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多种不同模式:












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值