欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Paint 色彩一些偏知识

程序员文章站 2022-07-07 11:19:49
...

转载于 抛物线

http://hencoder.com/ui-1-2/

色彩优化

Paint 的色彩优化有两个方法: setDither(boolean dither) 和 setFilterBitmap(boolean filter) 。它们的作用都是让画面颜色变得更加「顺眼」,但原理和使用场景是不同的。

setDither(boolean dither)

设置图像的抖动。

在介绍抖动之前,先来看一个猥琐男:
Android Paint 色彩一些偏知识

注意毛利小五郎脸上的红晕,它们并不是使用一片淡红色涂抹出来的,而是画了三道深色的红线。这三道深色红线放在脸上,给人的视觉效果就成了「淡淡的红晕」。

抖动的原理和这个类似。所谓抖动(注意,它就叫抖动,不是防抖动,也不是去抖动,有些人在翻译的时候自作主张地加了一个「防」字或者「去」字,这是不对的),是指把图像从较高色彩深度(即可用的颜色数)向较低色彩深度的区域绘制时,在图像中有意地插入噪点,通过有规律地扰乱图像来让图像对于肉眼更加真实的做法。

比如向 1 位色彩深度的区域中绘制灰色,由于 1 位深度只包含黑和白两种颜色,在默认情况下,即不加抖动的时候,只能选择向上或向下选择最接近灰色的白色或黑色来绘制,那么显示出来也只能是一片白或者一片黑。而加了抖动后,就可以绘制出让肉眼识别为灰色的效果了:
Android Paint 色彩一些偏知识

瞧,像上面这样,用黑白相间的方式来绘制,就可以骗过肉眼,让肉眼辨别为灰色了。

嗯?你说你看不出灰色,只看出黑白相间?没关系,那是因为像素颗粒太大,我把像素颗粒缩小,看到完整效果你就会发现变灰了:
Android Paint 色彩一些偏知识

这下变灰了吧?

什么,还没有变灰?那一定是你看图的姿势不对了。
Android Paint 色彩一些偏知识

不过,抖动可不只可以用在纯色的绘制。在实际的应用场景中,抖动更多的作用是在图像降低色彩深度绘制时,避免出现大片的色带与色块。效果盗一下*的图:
Android Paint 色彩一些偏知识

看着很牛逼对吧?确实很牛逼,而且在 Android 里使用起来也很简单,一行代码就搞定:

paint.setDither(true);

不过对于现在(2017年)而言, setDither(dither) 已经没有当年那么实用了,因为现在的 Android 版本的绘制,默认的色彩深度已经是 32 位的 ARGB_8888 ,效果已经足够清晰了。只有当你向自建的 Bitmap 中绘制,并且选择 16 位色的 ARGB_4444 或者 RGB_565 的时候,开启它才会有比较明显的效果。

setFilterBitmap(boolean filter)

设置是否使用双线性过滤来绘制 Bitmap 。

图像在放大绘制的时候,默认使用的是最近邻插值过滤,这种算法简单,但会出现马赛克现象;而如果开启了双线性过滤,就可以让结果图像显得更加平滑。效果依然盗*的图:

Android Paint 色彩一些偏知识

牛逼吧?而且它的使用同样也很简单:

paint.setFilterBitmap(true);  

加上这一行,在放大绘制 Bitmap 的时候就会使用双线性过滤了。

以上就是 Paint 的两个色彩优化的方法: setDither(dither) ,设置抖动来优化色彩深度降低时的绘制效果; setFilterBitmap(filterBitmap) ,设置双线性过滤来优化 Bitmap 放大绘制的效果。