GDIGDI+从入门到精通-第五讲.ppt

上传人:rrsccc 文档编号:9690098 上传时间:2021-03-17 格式:PPT 页数:25 大小:618KB
返回 下载 相关 举报
GDIGDI+从入门到精通-第五讲.ppt_第1页
第1页 / 共25页
GDIGDI+从入门到精通-第五讲.ppt_第2页
第2页 / 共25页
GDIGDI+从入门到精通-第五讲.ppt_第3页
第3页 / 共25页
GDIGDI+从入门到精通-第五讲.ppt_第4页
第4页 / 共25页
GDIGDI+从入门到精通-第五讲.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《GDIGDI+从入门到精通-第五讲.ppt》由会员分享,可在线阅读,更多相关《GDIGDI+从入门到精通-第五讲.ppt(25页珍藏版)》请在三一文库上搜索。

1、第五讲:GDI/GDI+高级编程进阶 主讲人:阙海忠 UIPower CEO,本讲要点,图片平铺 DC的偏移 内存DC类的构建 百叶窗特效 保存图像文件到本地磁盘,DC的剪辑,用SelectClipRgn函数来剪辑指定的区域,只有被剪辑的部分,才会被绘制! SelectClipRgn(HDC hDC, HRGN hRgn); 参数hDC就是我们要剪辑的DC句柄。 参数hRgn就是我们要剪辑的区域。,DC的剪辑,要剪辑的区域,不一定要是矩形区域,也可以是圆角矩形区域,也可以是圆形区域等。比如: CreateRectRgn(int x1, int y1, int x2, int y2);就是创建矩

2、形区域, CreateRoundRectRgn(int x1,int y1,int x2,int y2,int w,int h)就是创建圆角矩形区域, CreateEllipticRgn(int x1, int y1, int x2, int y2);就是创建圆形区域。,DC的偏移,DC的偏移就是设置DC绘制的起点坐标位置。默认情况下,DC的绘制起点坐标是在DC左上角的(0,0)位置。 如果我们把这个起点坐标修改了,假如修改成(100,200),那以后往这个DC绘制时,就默认以(100,200)为起点坐标。这时,如果编写TextOut(hdc, 0, 0, .),就会把字符串绘制在(100,2

3、00)上面;如果编写TextOut(hdc, -100, -200, .),就会把字符串绘制在(0,0)上面。,DC的偏移,SetViewportOrgEx(HDC hdc, int x, int y, LPPOINT lppt); 参数hdc就是要修改绘制起点坐标的DC句柄。 参数x就是新的绘制起点坐标的X坐标位置。 参数y就是新的绘制起点坐标的Y坐标位置。 参数lppt可以用来获取旧的绘制起点坐标,可设置为NULL,代表不获取。,DC的偏移,GetViewportOrgEx(HDC hdc, LPPOINT lppoint); 参数hdc就是要获取绘制起点坐标的DC句柄。 参数lppoin

4、t用来获取hdc当前绘制的起点坐标。,百叶窗特效特效介绍,百叶窗就是把窗口的客户区域分割成N个的条状块。假设按下键盘的E键时,窗口背景就变成白色,然后,依次显示2,4,6,8,10.偶数个的条状块区域,偶数的条状块区域显示完之后,再依次地显示1,3,5,7,9.奇数个的条状块区域。 下页为百页窗显示过程的一张截图。,百叶窗特效特效介绍,百叶窗特效实现思路,首先,获取当前窗口DC中的位图句柄。 然后,获取当前窗口DC位图中的像素颜色数据。 再然后,创建N个位图,每个位图对应百叶窗的每个条状块。每创建完一个新位图之后,把当前窗口DC位图中的指定区块的颜色数据拷贝到新位图的像素数据中。 再然后,就依

5、次绘制2,4,6,8,10.偶数个的条状块区域。 再然后,就依次绘制1,3,5,7,9.奇数个的条状块区域。,获取位图的像素颜色数据,GetBitmapBits(HBITMAP hbit, LONG cb, LPVOID lpvBits); 参数hbit就是要获取像素颜色数据的位图句柄。 参数lpvBits就是要接收位图像素颜色数据的缓冲区。 参数cb就是缓冲区lpvBits的大小。,CreateDIBSection创建位图,CreateDIBSection函数的功能就是创建一个应用程序可以直接写入像素颜色数据、与设备无关的位图。该函数提供一个指针,该指针指向位图的像素颜色数据的地方。通过改指

6、针修改数据,最终为该位图写入了像素颜色数据了。,CreateDIBSection创建位图,HBITMAP CreateDIBSection(HDC hdc, CONST BITMAPINFO *lpbmi, UINT usage, VOID *ppvBits, HANDLE hSection, DWORD offset); 参数hdc就是设备环境句柄。 参数lpbmi就是一个指向BITMAPINFO结构的指针,该结构指定了设备位图的各种属性,比如位图的维数。,CreateDIBSection创建位图,参数iUsage指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组

7、包含的数据类型,要么是逻辑调色板索引值(对应的参数值是DIB_PAL_COLORS),要么是原始的RGB值(对应的参数值是DIB_RGB_COLORS)。 参数ppvBits指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。,CreateDIBSection创建位图,参数hSection为文件映射对象的句柄。函数将使用该对象来创建位图,该参数可以是NULL。 参数DwOffset指定从hSection引用的文件映射对象开始处算起的偏移量。在hSection为NULL时,该值被忽略。 返回值:如果函数执行成功,那么返回值就是刚刚创建的位图句柄。如果函数执行失败,返回值为NULL。,Bi

8、tmap的结构,BMP文件总体上由4部分组成,分别是位图文件头、位图信息头、调色板和图像数据。,16,Bitmap的结构,位图文件头包含了图像类型、图像大小、图据存放地址和两个保留未使用的字段。 typedef struct tagBITMAPFILEHEADER WORD bfType;/图像类型 DWORD bfSize;/图像大小 WORD bfReserved1;/保留未使用的字断 WORD bfReserved2;/保留未使用的字断 DWORD bfOffBits;/图像数据存放地址 BITMAPFILEHEADER,17,Bitmap的结构,位图信息头包含了位图信息头的大小、图像的

9、宽高、图像的色深、压缩说明、图像数据的大小和其它一些参数。 typedef struct tagBITMAPINFOHEADER DWORD biSize;/本结构的大小。 LONG biWidth;/BMP图像的宽度。 LONG biHeight;/BMP图像的高度。 WORD biPlanes;/图像的面数。 WORD biBitCount;/图像的色深,即一个像素用多少位表示。 DWORD biCompression; /压缩方式,如0表示不压缩,1表示RLE8压缩,2表示RLE4压缩。 DWORD biSizeImage;/BMP图像数据大小。 LONG biXPelsPerMeter

10、; /水平分辨率。 LONG biYPelsPerMeter; /重直分辨率 DWORD biClrUsed; /BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为256。 DWORD biClrImportant; /重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将被辅助驱动程序显示颜色。 BITMAPINFOHEADER;,18,Bitmap的结构,调色板是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。,

11、19,Bitmap的结构,调色板的数据结构定义: typedef struct tagRGBQUAD BYTE rgbBlue;/蓝色值 BYTE rgbGreen;/绿色值 BYTE rgbRed;/红色值 BYTE rgbReserved;/保留值 RGBQUAD;,20,Bitmap的结构,位图数据: 如果图像是单色、16色和256色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号。 如果图像是16位、24位和32位色,则文件中不保留调色板,即不存在调色板,图像的颜色直接在位图数据中给出。,21,Bitmap的结构,16位图像使用2字节保存颜色值,常见有两种格式:5位红5位绿

12、5位蓝和5位红6位绿5位蓝,即555格式和565格式。555格式只使用了15位,最后一位保留,设为0。 24位图像使用3字节保存颜色值,每一个字节代表一种颜色,按红、绿、蓝排列。 32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除了原来的红、绿、蓝,还有Alpha通道,即透明色。,22,GetDIBits获取位图数据,参数lpvBits指向接收位图数据的缓冲区,如果该参数为NULL,位图的格式与大小将被写进由 参数lpbmi指向的BITMAPINFO结构中。 参数Lpbi指向BITMAPINFO结构。BITMAPINFO结构指定了hbm位图数据的格式。如果lpvBits非空,则位图的颜

13、色表将被设置到此结构上。,GetDIBits获取位图数据,int GetDIBits(HDC hdc, HBITMAP hbm, UINT start, UINT cLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT usage); 参数hdc就是设备DC。 参数hbm就是要获取位图数据的位图句柄。 参数start设置要获取位图数据的第一条扫描线。 参数cLines设置要获取位图数据的扫描线数目。,GetDIBits获取位图数据,参数uUsage设置lpbmi所指向的BITMAPINFO结构中bmiColors的含义。uUsage可以是下列值之一: DIB_PAL_COLORS:通过调色板方式表示颜色。 DIB_RGB_COLORS:直接采用RGB方式表示颜色。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1