windows绘图函数对比

来源:互联网 发布:阿里云域名多少钱 编辑:程序博客网 时间:2024/06/05 09:49

图像知识:

1.点阵图呈矩形,并有空间尺寸,图像的高度和宽度都以图素为单位。例如,此网格可描述一个很小的点阵图:宽度为9图素,高度为6图素,或者更简单。

2.点阵图是矩形的,但是电脑记忆体空间是线性的,通常(但并不都是这样)点阵图按列储存在记忆体中,且从顶列图素开始到底列结束。

3.除空间尺寸以外,点阵图还有颜色尺寸。这里指的是每个图素所需要的位元数,有时也称为点阵图的 颜色深度 (color depth)、 位元数 (bit-count)或 位元/图素 (bpp:bits per pixel)数。就是一个像素用多少位来表示,如果用1位来表示就只有两种颜色,黑和白,图像就是简单的黑白图像。如果想让图像颜色细致细腻就需要更多的颜色种类,这时就需要用更多的位元来表示一个像素点。如16 位元可得到65,536 种颜色,而24 位元可得到16,777,216种颜色。

4.可以把整个视频显示器看作是一幅大点阵图。您在萤幕上见到的图素由储存在视频显示卡上记忆体中的位元来描述。任何视频显示的矩形区域也都是一个点阵图,其大小是它所包含的行列数。

5.装置内容指的是特殊的图形输出设备(例如视讯显示器或者印表机)及其装置驱动程式。记忆体装置内容只位於记忆体中,它不是真正的图形输出设备,但可以说与指定的真正设备「相容」。要建立一个记忆体装置内容,您必须首先有实际设备的装置内容代号。如果是hdc,那么您可以像下面那样建立记忆体装置内容:
hdcMem = CreateCompatibleDC (hdc) ;
通常,函式的呼叫比这更简单。如果您将参数设为NULL,那么Windows将建立一个与视讯显示器相相容的记忆体装置内容。应用程式建立的任何记忆体装置内容最终都通过呼叫DeleteDC来清除。您可以通过将一个GDI点阵图物件选进记忆体装置内容来完成这项工作,例如:
SelectObject (hdcMem, hBitmap) ;

6.BITMAP结构定义如下:
typedef struct _tagBITMAP
{
      LONG       bmType ;            // set to 0
      LONG       bmWidth ;           // width in pixels
      LONG       bmHeight ;          // height in pixels
      LONG       bmWidthBytes ;     // width of row in bytes
      WORD       bmPlanes ;          // number of color planes
      WORD       bmBitsPixel ;      // number of bits per pixel
      LPVOID  bmBits ;            // pointer to pixel bits
}
BITMAP, * PBITMAP ;

7.从Windows 3.0开始,定义了一种新的点阵图格式,我们称之为装置无关点阵图(device-independent bitmap),或者DIB。DIB包括了自己的调色盘,
其中显示了与RGB颜色相对应的图素位元。DIB能显示在任何位元映射输出设备上。DIB 首先作为一种档案格式,它的副档名为.BMP,在极少情况下为.DIB。

1. BitBlt

函数原型:BOOL BitBlt (hdcDst, xDst, yDst, cx, cy, hdcSrc, xSrc, ySrc, dwROP);

函数功能:将一块矩形区域像素的图像数据复制到目的矩形区域原大小显示出来。BitBlt函式从称为「来源」的装置内容中将一个矩形区的图素传输到称为「目的(destination)」的另一个装置内容中相同大小的矩形区。此函式的语法

参数说明:hdcDst,目的设备句柄;

                  xDst,yDst目的矩形坐标点;

                  cx,cy图像的宽和高;

                  hhdcSrc,源设备句柄;

                  xSrc, ySrc,源矩形坐标点;

                  dwROP,位元映射操作型态。

注:两个句柄可以是同一个设备描述句柄,也可以是不同的设备描述句柄。在BitBlt内的最大限制是两个装置内容必须是相容的。这意味著或者其中之一必须是单色的,或者两者的每个图素都相同的位元数。总而言之,您不能用此方法将萤幕上的某些图形复制到印表机。

2. StretchBlt

函数原型:BOOL StretchBlt (  hdcDst, xDst, yDst, cxDst, cyDst, 

                                      hdcSrc, xSrc, ySrc, cxSrc, cySrc, dwROP) ;

函数功能:将一块矩形区域像素的图像数据复制到目的矩形区域以压缩或者拉伸的方式显示出来。

参数说明:hdcDst,目的设备句柄;

                  xDst,yDst目的矩形坐标点;

                  cxDst, cyDst目标矩形宽和高;

                  hhdcSrc,源设备句柄;

                  xSrc, ySrc,源矩形宽和高;

                  cxSrc, cySrc,源矩形坐标点;

                  dwROP,位元映射操作型态。

3. SetDIBitsToDevice

函数原型:int  SetDIBitsToDevice (
                   hdc,             // device context handle
                   xDst,            // x destination coordinate 
                    yDst,            // y destination coordinate
                   cxSrc,           // source rectangle width
                   cySrc,           // source rectangle height
                   xSrc,            // x source coordinate
                   ySrc,            // y source coordinate
                   yScan,           // first scan line to draw
                   cyScans,         // number of scan lines to draw
                   pBits,           // pointer to DIB pixel bits
                   pInfo,           // pointer to DIB information
                   fClrUse) ;       // color use flag

函数功能:SetDIBitsToDevice函式显示没有延伸和缩小的DIB。

参数说明:SetDIBitsToDevice的第一个参数是装置内容代号,它指出显示DIB的设备。下面两个参数xDst和yDst,是输出设备的逻辑坐标,并指出了显示DIB图像左上角的坐标(「上端」指的是视觉上的上方,并不是DIB图素的第一行)。当显示整个DIB时,应把xSrc和ySrc设定为0,并且cxSrc和cySrc应分别等於DIB的图素宽度和高度。

4.CreateBitmap函式用法如下:
hBitmap = CreateBitmap (cx, cy, cPlanes, cBitsPixel, bits) ;
前两个参数是点阵图的宽度和高度(以图素为单位),第三个参数是颜色面的数目第四个参数是每图素的位元数,第五个参数是指向一个以特定颜色格式存放的位元阵列的指标,阵列内存放有用来初始化该DDB的图像。如果您不想用一张现有的图像来初始化DDB,可以将最後一个参数设为NULL。以後您还是可以设定该DDB内图素的内容。

5.CreateCompatibleBitmap (hdc, cx, cy) ;
此函式建立了一个与设备相容的点阵图,此设备的装置内容代号由第一个参数给出。CreateCompatibleBitmap用装置内容代号来获得GetDeviceCaps资讯,然後将此资讯传递给CreateBitmap。除了与实际的装置内容有相同的记忆体组织之外,DDB与装置内容没有其他联系。

原创粉丝点击