本文讲的是TC中在VGA的256色调色板模式下,怎样做Alpha混合。这是以前做我的VGA13H Graphics Lib for TC2.0 时候写的,基本上实现了Alpha混合。缺点是速度太慢了,ARGB和GETRGB两个宏中用到了除法运算,速度就不可能快起来的。而且也犯了一个错误,在256色模式下64级的Alpha混合是没有意义的,也不可能实现,最多也只能到达4级。总之这篇文章还有很多错误,最近反复研究Alpha混合和调色板,又有新的收获,新的算法速度足以用作实时Alpha混合,等以后写成文章再和大家分享。
256色视频模式由于采用了调色板,在显存里存放的像素值实际上是是调色板的索引号,256色的BMP文件也与之类似,其数据域里存放的也是调色板的索引号,这种情况下给我们的Alpha混客带来极大的不方便。
在实际的应用中,通常是选定一个固定的调色板,然后在这个调色板下进行绘图操作。这是因为一副图像在不同的调色板下有不同的显示效果,两个采用不同调色板的位图在一般情况下是不能同屏显示的。所以通常的情况是选择一个通用的调色板,在把各个位图都抖动处理为使用这个通用调色板的位图,从而解决了同屏显示的问题。这样看来,如何选择一个通用的调色板就是关键了。
大家都知道VGA/SVGA的调色板寄存器通常为6 bits,每个寄存器存放一个颜色分量,一个RGB颜色向量就需要三个寄存器来存放,因此最多能表示 2^6*2^6*2^6=256k 种颜色,这个颜色范围是很大的。而VGA/SVGA只有256组调色板寄存器,,因此要在(0,0,0)-(63,63,63)这样一个向量空间中,精选出256个颜色向量。这有点和线性代数中求向量空间的基(极大无关组)类似。我们的任务也类似于要在(0,0