在windows程序中经常要处理位图,下面写一点理解。
windows程序处理图像和现实世界中处理图像的过程差不多,下面来比较一下。
我们在作画时需要工具,比如画笔和刷子,GDI其实就对应这这类工具。
GDI(图形设备接口)。GDI对象代表一个物理设备,GDI对象有Pen,Brush等等。它代表的是作画用的工具。
另外,我们作画时需要一个载体,比如在纸上作画,或在黑板上作画。那么CDC对象就是作画的载体了。
CDC(设备上下文)其实就是指定在什么位置作画,在屏幕上 或是打印机上等等。
当我们需要在一张纸上作画时,首先要选好一张纸,那就是要准备好CDC对象,然后要选一支笔,那就是准备好GDI对象。
windows在画不同的图式时有专门的工具,比如划线,用Pen.
windows程序在处理一个图片时,它有一个专门的GDI工具来处理图片(CBitmap),CBitmap专门用来画图的。
比如我们现实世界中要将一幅图片画到黑板上,首先我们应该准备好一块黑板。
对应的计算机的操作就是准备好一个CDC对象。
CClientDC dc(this);OnPrepareDC(&dc);
我们要将一幅图片画到黑板上。我们不能直接把图贴到黑板上,首先我们要在脑子里面有个图片的样子,然后按照脑子中的样子,把图片复制到黑板上。
在计算机中这是要建立一个内存兼容DC,相当于在大脑中的草图。
pMemoryDC = new CDC;
首先建立了一个CDC对象,但是还不知道CDC是什么样子的。所以要建立一个和黑板兼容的DC,这样我们在画图的时候才知道怎么设计。pMemoryDC->CreateCompatibleDC(&dc),这样内存中的DC就是目标DC兼容了,就相当于我们脑海中出现了一个黑板的样子,这样我们就可以实际实际的图画了。
我们要在黑板上画一幅图,就要知道图的大小,那么我们首先要先设计画布的大小,首先我们要有一块画布。
对应的是建立一个CBitmap对象,pBitmap = new CBitmap;
在脑海中把画布铺到脑海的黑板上。
对应的是pMemoryDC->SelectObject(pBitmap);
然后是在脑海中将图设计好,也就是脑海中有了图片的完整样子。
对应的是将图片的内容拷贝到内存中的DC上,
最后是把脑海中的图片画到黑板上。
对应的是将内存中的图片,拷贝到真正的设备DC中。