24、32位真彩色:
1.24位定位:DWORD pixel_addr = 3*(x) + y*lpitch;
video_buffer[pixel_addr] = blue;
video_buffer[pixel_addr+1] = green;
video_buffer[pixel_addr+2] = red;
知识回顾:lPitch表示从画面一行行首数据到下一行行首数据的距离,以字节为单位
2.Alpha(8).8.8.8关于32位色彩
这种方式用8位来表示Alpha值或者透明信息(有时是一些其他信息)。然后是红色、绿色、兰色,每种色彩8位。但是简单的位图不用管这些,不
考虑Alpha值,随便写进去8位就可以了。这种模式优点在于每像素32位,是奔腾处理器最快的可能内存寻址方式。
3.双缓冲
(1)如何平滑的显示动画呢?多数计算机动画通过在画面外的缓冲区域上画每个动画的备用屏幕,然后将图象快速地切换到显示画面实现。
(2)在缓冲区域画出图象,然后拷贝到显示画面的技术被称为双缓冲技术,也是99%的游戏所采用的动画技术。
(3)建立双缓冲的代码
UCHAR *double_buffer = new UCHAR(640*400)
(4)看起来合情合理,因为每条实线有640字节,而且你用每线640字节共480线来保证矩形影象。好,下面有一个问题,假设你锁定一个指针primary_buffer指向主显示画面,并假设你在锁定内存过程中提取了内存步长,存储在mempitch中,如图7.8所示。如果mempitch等于640,可以通过下面代码拷贝double_buffer到primary_buffer:
memcpy((void*)primary_buffer,(void*)double_buffer,640*400)
但是这样还是有问题,因为不知道主画面的步长为刚好每线640字节时才工作。所以最好还是要先检测主画面的步长是否为640,代码如下:
if(mempitch == 640)
{
memcpy((void*)primary_buffer,(void*)double_buffer,640*400)
}
else
{
for(int y=0;y<480;y++)
{
memcpy((void*)primary_buffer,(void*)double_buffer,640);
primary_buffer += ddsd.lPitch;
double_buffer += 640;
}
}