这里有一篇关于图像的半影调和抖动技术的文章,里面介绍了抖动算法。
http://www-scf.usc.edu/~flv/ipbook/chap04.htm
其实抖动算法应用极广,而且也不是很难,相对较容易实现。我们知道,在256色及全
彩色图像中,每一种颜色均由R、G、B三个颜色分量组成,而每一个分量又一般由一个字节
表示。这样,每一个颜色分量可有256级亮度变化。 本算法的关键在于引入亮度矩阵的
概念,即采用一个16×16的矩阵来表示每一个颜色分量的亮度值,不同亮度值对应着矩阵的
不同排列。矩阵全为0时对应亮度0,全为255时对应亮度255。
当亮度值为L时,亮度矩阵中将有[L255×256]个255及[(1-L255)×256]个0,此时,矩阵
的平均亮度值为
L'={[L/255×256]×255+[(1-L/255)×256]×0}/256=L
这就是说,矩阵的平均亮度正好为颜色分量的实际亮度。
假设某一颜色C的R、G、B三个颜色分量的亮度矩阵分别为: @@01A04600.GIF;公式一@@
其中rmn、gmn、bmn(0≤m, n≤15)取值为0或15。
将上述三个矩阵作叠加运算,得@@01A04601.GIF;公式二@@
其中的Cmn为表1中由rmn、gmn、bmn所确定的颜色值。表1为VGA16色图形模式下的标
准调色板(并非设置模式后的缺省调色板)。显然,Cmn只可能为0及9~15之中的一个。由此
方法得到的矩阵Mc即可视为颜色C的模拟矩阵。由于颜色C的R、G、B三个颜色分量与亮度矩
阵MR、MG、MB有着相等的亮度值,所以矩阵MC从视觉效果上来讲能很好地模拟颜色C。但在显
示时,不可能用整个这样的矩阵来替代一个像素点,那将导致整幅图像长宽均变成原图的16
倍。实际的做法是:若该像素点距离图像原点的座标为(X,Y),则令:
m=Y mod 16
n=X mod 16 (1)
此时,可用MC中的颜色Cmn来显示该像素。 @@01A04602.GIF;表1 16色图形模式标准
调色板@@
哈哈,如果不明白,我们再讨论,呵呵,如果有用,记得给分噢。