24、32位真彩色

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;
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值