兼容位图

我对兼容位图的理解是:它是为解决绘图统一性而建立的一种机制,和位深无关,你在32位的程序里BITBLT()8位的图不也能行吗?

所谓的绘图统一性是这样的。假设在一个界面有多个贴图,如果你不用兼容位图的话,那么你就要贴多次,比如有3幅图,你要贴3次,有5幅图你就要贴5次。


果你仅仅只想画一幅话的话,这也没什么,但在游戏领域就会造成大麻烦,因为游戏是要不断刷新图象的,而且是一秒钟要刷新几十次之多,这就是所谓的帧频,也
就是说,在一秒钟内将屏幕上所有的图象绘几十次,如果屏幕上有5幅图,帧频是30次,那么你要在一秒钟内绘5*30=150次图,如果有10幅图,那就得
绘300次,这会给显示系统造成很大负担,最显著的表现就是屏幕闪烁。

而兼容位图能解决这一问题,它先把各个位图绘制到内存里,然后再一
次性绘制到屏幕上,绘图次数就大大减少了,打个比喻,不用兼容位图绘图就好比是手动运货,你一次只搬一件货物过去,而兼容位图就是用集装箱运货,你先把所
有的货物放到集装箱里,再一次运过去,这样你的劳动量就大大减少了

所谓的“兼容位图”其实就是“内存位图”。绘图过程中你要用到内存,而普通绘图不要用到内存。

假设你要在窗口中绘制A,B,C三幅图,

普通绘图过程是这样的:
把A绘制到窗口中;
把B绘制到窗口中;
把C绘制到窗口中;

而兼容位图是这样的:
先在内存中开辟一块区域存放图片,
把A绘制到内存中;
把B绘制到内存中;
把C绘制到内存中;
然后把内存中绘好的图片绘制到窗口中。

普通绘图要绘3次,而兼容位图只要绘一次。

时间: 2024-10-13 16:01:27

兼容位图的相关文章

位图操作和双缓冲机制

位图操作代码部分: CRect rect;  GetClientRect(rect);  pDC->SetMapMode(MM_ANISOTROPIC);  pDC->SetWindowExt(rect.Width(), rect.Height());  pDC->SetViewportExt(rect.Width(), -rect.Height());  pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2); CDC MemDC

透明位图的显示 作者:王骏

透明位图的显示作者:王骏 http://www.vckbase.com/document/viewdoc/?id=532 下载本文示例代码 包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图.本文将介绍动态生成掩码位图绘制具有透明区域位图的方法. 一.TransparentBlt 函数的使用  TransparentB

如何将内存中的位图数据绘制在DC上

假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据.然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了.主要信息包含在位图信息头里面,数据则在位图数据缓冲里面.现在的问题是,在Windows下面如何将一张位图画出来,而且现在是如何从数据缓存里面绘画出位图.  一般情况,我们都是直接绘制在dc里面,而不是绑定到子控件,让子控件自己绘画,比如picture控件之类的,我觉得提供绘制在dc里面的接口更具有广泛性. 现在我知道两种从内存数据绘制彩色位图的2种方法.

WINCE下由HBITMAP获取位图RGB颜色数据

以下代码未经过测试,只是编译没有问题,以前同事问到这个,所以才有下面代码: class CBitmapBits { public: CBitmapBits() : m_pBitsBuf(NULL) , m_dwWidth(0) , m_dwHeight(0) { } ~CBitmapBits() { Destroy(); } // 释放位图数据 void Destroy() { if (m_pBitsBuf != NULL) { delete[] m_pBitsBuf; m_pBitsBuf =

屏幕抓取程序 (位图DDB的例子)

屏幕抓取程序的意思是将整个屏幕图显示在应用程序的用户区中,等价于截图.对桌面窗口的操作:首先得知道桌面窗口的宽和高,获取宽和高需要利用窗口的设备句柄,而获取设备句柄需要知道窗口句柄,这一系列的连串关系如下:窗口句柄——>设备句柄——>获取设备句柄属性(比如宽和高).(书本采用的一种方法,但至少也把这种种被需要的关系复习了一下,必须承认,初学需要重复很多次才能形成熟练意识) hwndDeskTop = GetDesktopWindow();// 获取桌面窗口的窗口句柄 hdcDeskTop =

第15章 设备相关位图_15.3 DIB和DDB的结合

15.3.1 从DIB创建DDB (1)hBitmap =CreateDIBitmap(…)——注意这名称会误导,实际上创建的是DDB 参数 说明 hdc 设备环境句柄,可以为NULL. pInfoHdr 指向DIB信息头的指针,即BITMAPINFOHEADER fInit 0或CBM_INIT.CBM_INIT指定用后面3个参数来初始化DDB中的像素位 pBits DIB像素位的指针 pInfo DIB信息指针,即BITMAPINFO(包含BITMAPINFOHEADER和颜色表) fClr

画透明位图

画透明位图 我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来. 一.实现方法 绘制"透明"位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为"透明色".通过将位图的背景色指定为"透明色",在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上. 绘制&

VC中显示ICON和BMP图片

显示ICON图标,如下: static HICON hIcon  = (HICON)::LoadImage(       AfxGetInstanceHandle(),        TEXT("1.ico"),       IMAGE_ICON,       0, 0,       LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE);          CClientDC dc(this);       dc.DrawIc

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到