GDIGDI从入门到精通第五讲_第1页
GDIGDI从入门到精通第五讲_第2页
GDIGDI从入门到精通第五讲_第3页
GDIGDI从入门到精通第五讲_第4页
GDIGDI从入门到精通第五讲_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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);就是创建矩形区域,create

2、roundrectrgn(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,200)上面;如果编写texto

3、ut(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句柄。参数lppoint用来获取hdc当前绘制的起点坐标。百叶窗特效特效

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

5、,3,5,7,9.奇数个的条状块区域。获取位图的像素颜色数据getbitmapbits(hbitmap hbit, long cb, lpvoid lpvbits);参数hbit就是要获取像素颜色数据的位图句柄。参数lpvbits就是要接收位图像素颜色数据的缓冲区。参数cb就是缓冲区lpvbits的大小。createdibsection创建位图createdibsection函数的功能就是创建一个应用程序可以直接写入像素颜色数据、与设备无关的位图。该函数提供一个指针,该指针指向位图的像素颜色数据的地方。通过改指针修改数据,最终为该位图写入了像素颜色数据了。createdibsection创建位

6、图hbitmap createdibsection(hdc hdc, const bitmapinfo *lpbmi, uint usage, void *ppvbits, handle hsection, dword offset);参数hdc就是设备环境句柄。参数lpbmi就是一个指向bitmapinfo结构的指针,该结构指定了设备位图的各种属性,比如位图的维数。createdibsection创建位图参数iusage指定由pbmi参数指定的bitmapinfo结构中的成员bmicolors数组包含的数据类型,要么是逻辑调色板索引值(对应的参数值是dib_pal_colors),要么是原始

7、的rgb值(对应的参数值是dib_rgb_colors)。参数ppvbits指向一个变量的指针,该变量接收一个指向dib位数据值的指针。createdibsection创建位图参数hsection为文件映射对象的句柄。函数将使用该对象来创建位图,该参数可以是null。参数dwoffset指定从hsection引用的文件映射对象开始处算起的偏移量。在hsection为null时,该值被忽略。返回值:如果函数执行成功,那么返回值就是刚刚创建的位图句柄。如果函数执行失败,返回值为null。bitmap的结构bmp文件总体上由4部分组成,分别是位图文件头、位图信息头、调色板和图像数据。16bitmap

8、的结构位图文件头包含了图像类型、图像大小、图据存放地址和两个保留未使用的字段。typedef struct tagbitmapfileheader word bftype;/图像类型 dword bfsize;/图像大小 word bfreserved1;/保留未使用的字断 word bfreserved2;/保留未使用的字断 dword bfoffbits;/图像数据存放地址 bitmapfileheader17bitmap的结构位图信息头包含了位图信息头的大小、图像的宽高、图像的色深、压缩说明、图像数据的大小和其它一些参数。typedef struct tagbitmapinfoheade

9、r dword bisize; /本结构的大小。 long biwidth; /bmp图像的宽度。 long biheight; /bmp图像的高度。 word biplanes;/图像的面数。 word bibitcount;/图像的色深,即一个像素用多少位表示。dword bicompression; /压缩方式,如0表示不压缩,1表示rle8压缩,2表示rle4压缩。 dword bisizeimage;/bmp图像数据大小。 long bixpelspermeter; /水平分辨率。long biypelspermeter; /重直分辨率 dword biclrused; /bmp图像

10、使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为256。 dword biclrimportant; /重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的bmp图像来说,当显卡不能够显示所有颜色时,此值将被辅助驱动程序显示颜色。 bitmapinfoheader;18bitmap的结构调色板是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。19bitmap的结构调色板的数据结构定义:typedef struct tagrgbquad byte rgbblue;/蓝色值

11、byte rgbgreen;/绿色值 byte rgbred;/红色值 byte rgbreserved;/保留值 rgbquad;20bitmap的结构位图数据:如果图像是单色、16色和256色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号。如果图像是16位、24位和32位色,则文件中不保留调色板,即不存在调色板,图像的颜色直接在位图数据中给出。21bitmap的结构16位图像使用2字节保存颜色值,常见有两种格式:5位红5位绿5位蓝和5位红6位绿5位蓝,即555格式和565格式。555格式只使用了15位,最后一位保留,设为0。24位图像使用3字节保存颜色值,每一个字节代表一种颜

12、色,按红、绿、蓝排列。32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除了原来的红、绿、蓝,还有alpha通道,即透明色。22getdibits获取位图数据参数lpvbits指向接收位图数据的缓冲区,如果该参数为null,位图的格式与大小将被写进由参数lpbmi指向的bitmapinfo结构中。参数lpbi指向bitmapinfo结构。bitmapinfo结构指定了hbm位图数据的格式。如果lpvbits非空,则位图的颜色表将被设置到此结构上。getdibits获取位图数据int getdibits(hdc hdc, hbitmap hbm, uint start, uint clines, lpvoid lpvbits, lpbitmapinfo lpbmi, uint usage);参数hdc就是设备dc。参数hbm就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论