




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五讲:GDI/GDI+高级编程进阶主讲人:阙海忠UIPowerCEO第五讲:GDI/GDI+高级编程进阶本讲要点图片平铺DC的偏移内存DC类的构建百叶窗特效保存图像文件到本地磁盘本讲要点图片平铺DC的剪辑
用SelectClipRgn函数来剪辑指定的区域,只有被剪辑的部分,才会被绘制! SelectClipRgn(HDChDC,HRGNhRgn); 参数hDC就是我们要剪辑的DC句柄。 参数hRgn就是我们要剪辑的区域。
DC的剪辑 用SelectClipRgn函数来剪辑指定的区DC的剪辑 要剪辑的区域,不一定要是矩形区域,也可以是圆角矩形区域,也可以是圆形区域等。比如: CreateRectRgn(intx1,inty1,intx2,inty2);就是创建矩形区域, CreateRoundRectRgn(intx1,inty1,intx2,inty2,intw,inth)就是创建圆角矩形区域, CreateEllipticRgn(intx1,inty1,intx2,inty2);就是创建圆形区域。DC的剪辑 要剪辑的区域,不一定要是矩形区域,也可以是圆角DC的偏移 DC的偏移就是设置DC绘制的起点坐标位置。默认情况下,DC的绘制起点坐标是在DC左上角的(0,0)位置。 如果我们把这个起点坐标修改了,假如修改成(100,200),那以后往这个DC绘制时,就默认以(100,200)为起点坐标。这时,如果编写TextOut(hdc,0,0,...),就会把字符串绘制在(100,200)上面;如果编写TextOut(hdc,-100,-200,...),就会把字符串绘制在(0,0)上面。DC的偏移 DC的偏移就是设置DC绘制的起点坐标位置。默认DC的偏移 SetViewportOrgEx(HDChdc,intx,inty,LPPOINTlppt); 参数hdc就是要修改绘制起点坐标的DC句柄。 参数x就是新的绘制起点坐标的X坐标位置。 参数y就是新的绘制起点坐标的Y坐标位置。 参数lppt可以用来获取旧的绘制起点坐标,可设置为NULL,代表不获取。DC的偏移 SetViewportOrgEx(HDChdcDC的偏移 GetViewportOrgEx(HDChdc,LPPOINTlppoint);
参数hdc就是要获取绘制起点坐标的DC句柄。 参数lppoint用来获取hdc当前绘制的起点坐标。DC的偏移 GetViewportOrgEx(HDChdc百叶窗特效特效介绍 百叶窗就是把窗口的客户区域分割成N个的条状块。假设按下键盘的E键时,窗口背景就变成白色,然后,依次显示2,4,6,8,10...偶数个的条状块区域,偶数的条状块区域显示完之后,再依次地显示1,3,5,7,9...奇数个的条状块区域。 下页为百页窗显示过程的一张截图。百叶窗特效特效介绍 百叶窗就是把窗口的客户区域分割成N个的百叶窗特效特效介绍百叶窗特效特效介绍百叶窗特效实现思路 首先,获取当前窗口DC中的位图句柄。 然后,获取当前窗口DC位图中的像素颜色数据。 再然后,创建N个位图,每个位图对应百叶窗的每个条状块。每创建完一个新位图之后,把当前窗口DC位图中的指定区块的颜色数据拷贝到新位图的像素数据中。 再然后,就依次绘制2,4,6,8,10...偶数个的条状块区域。 再然后,就依次绘制1,3,5,7,9...奇数个的条状块区域。百叶窗特效实现思路 首先,获取当前窗口DC中的位图句柄。获取位图的像素颜色数据 GetBitmapBits(HBITMAPhbit,LONGcb,LPVOIDlpvBits);
参数hbit就是要获取像素颜色数据的位图句柄。 参数lpvBits就是要接收位图像素颜色数据的缓冲区。 参数cb就是缓冲区lpvBits的大小。获取位图的像素颜色数据 GetBitmapBits(HBITCreateDIBSection创建位图 CreateDIBSection函数的功能就是创建一个应用程序可以直接写入像素颜色数据、与设备无关的位图。该函数提供一个指针,该指针指向位图的像素颜色数据的地方。通过改指针修改数据,最终为该位图写入了像素颜色数据了。CreateDIBSection创建位图 CreateDICreateDIBSection创建位图 HBITMAPCreateDIBSection(HDChdc,CONSTBITMAPINFO*lpbmi,UINTusage,VOID**ppvBits,HANDLEhSection,DWORDoffset);
参数hdc就是设备环境句柄。 参数lpbmi就是一个指向BITMAPINFO结构的指针,该结构指定了设备位图的各种属性,比如位图的维数。
CreateDIBSection创建位图 HBITMAPCCreateDIBSection创建位图 参数iUsage指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型,要么是逻辑调色板索引值(对应的参数值是DIB_PAL_COLORS),要么是原始的RGB值(对应的参数值是DIB_RGB_COLORS)。 参数ppvBits指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。CreateDIBSection创建位图 参数iUsageCreateDIBSection创建位图 参数hSection为文件映射对象的句柄。函数将使用该对象来创建位图,该参数可以是NULL。
参数DwOffset指定从hSection引用的文件映射对象开始处算起的偏移量。在hSection为NULL时,该值被忽略。
返回值:如果函数执行成功,那么返回值就是刚刚创建的位图句柄。如果函数执行失败,返回值为NULL。CreateDIBSection创建位图 参数hSectioBitmap的结构 BMP文件总体上由4部分组成,分别是位图文件头、位图信息头、调色板和图像数据。16Bitmap的结构 BMP文件总体上由4部分组成,分别是位Bitmap的结构 位图文件头包含了图像类型、图像大小、图据存放地址和两个保留未使用的字段。typedefstructtagBITMAPFILEHEADER{WORDbfType; //图像类型DWORDbfSize; //图像大小WORDbfReserved1; //保留未使用的字断WORDbfReserved2; //保留未使用的字断DWORDbfOffBits; //图像数据存放地址}BITMAPFILEHEADER17Bitmap的结构 位图文件头包含了图像类型、图像大小、图Bitmap的结构位图信息头包含了位图信息头的大小、图像的宽高、图像的色深、压缩说明、图像数据的大小和其它一些参数。typedefstructtagBITMAPINFOHEADER{DWORDbiSize; //本结构的大小。LONGbiWidth; //BMP图像的宽度。LONGbiHeight; //BMP图像的高度。WORDbiPlanes; //图像的面数。WORDbiBitCount; //图像的色深,即一个像素用多少位表示。 DWORDbiCompression; //压缩方式,如0表示不压缩,1表示RLE8压缩,2表示RLE4压缩。 DWORDbiSizeImage; //BMP图像数据大小。 LONGbiXPelsPerMeter;//水平分辨率。 LONGbiYPelsPerMeter;//重直分辨率DWORDbiClrUsed;//BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为256。DWORDbiClrImportant; //重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将被辅助驱动程序显示颜色。}BITMAPINFOHEADER;18Bitmap的结构位图信息头包含了位图信息头的大小、图像的宽Bitmap的结构 调色板是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。19Bitmap的结构 调色板是单色、16色和256色图像文件Bitmap的结构调色板的数据结构定义:typedefstructtagRGBQUAD{BYTErgbBlue; //蓝色值BYTErgbGreen; //绿色值BYTErgbRed; //红色值BYTErgbReserved; //保留值}RGBQUAD;20Bitmap的结构调色板的数据结构定义:20Bitmap的结构位图数据: 如果图像是单色、16色和256色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号。 如果图像是16位、24位和32位色,则文件中不保留调色板,即不存在调色板,图像的颜色直接在位图数据中给出。
21Bitmap的结构位图数据:21Bitmap的结构 16位图像使用2字节保存颜色值,常见有两种格式:5位红5位绿5位蓝和5位红6位绿5位蓝,即555格式和565格式。555格式只使用了15位,最后一位保留,设为0。 24位图像使用3字节保存颜色值,每一个字节代表一种颜色,按红、绿、蓝排列。 32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除了原来的红、绿、蓝,还有Alpha通道,即透明色。22Bitmap的结构 16位图像使用2字节保存颜色值,常见有GetDIBits获取位图数据
参数lpvBits指向接收位图数据的缓冲区,如果该参数为NULL,位图的格式与大小将被写进由 参数lpbmi指向的BITMAPINFO结构中。 参数Lpbi指向BITMAPINFO结构。BITMAPINFO结构指定了hbm位图数据的格式。如果lpvBits非空,则位图的颜色表将被设置到此结构上。
GetDIBits获取位图数据 参数lpvBits指向接收GetDIBits获取位图数据 intGetDIBits(HDChdc,HBITMAPhbm,UINTstart,UINTcLines,LPVOIDlpvBits,LPBITMAPINFOlpbmi,UINTusage); 参数hdc就是设备DC。 参数hbm就是要获取位图数据的位图句柄。 参数start设置要获取位图数据的第一条扫描线。 参数cLines设置要获取位图数据的扫描线数目。
GetDIBits获取位图数据 intGetDIBits(GetDIBits获取位图数据 参数uUsage设置lpbmi所指向的BITMAPINFO结构中bmiColors的含义。uUsage可以是下列值之一: DIB_PAL_COLORS:通过调色板方式表示颜色。 DIB_RGB_COLORS:直接采用RGB方式表示颜色。GetDIBits获取位图数据 参数uUsage设置lpb第五讲:GDI/GDI+高级编程进阶主讲人:阙海忠UIPowerCEO第五讲:GDI/GDI+高级编程进阶本讲要点图片平铺DC的偏移内存DC类的构建百叶窗特效保存图像文件到本地磁盘本讲要点图片平铺DC的剪辑
用SelectClipRgn函数来剪辑指定的区域,只有被剪辑的部分,才会被绘制! SelectClipRgn(HDChDC,HRGNhRgn); 参数hDC就是我们要剪辑的DC句柄。 参数hRgn就是我们要剪辑的区域。
DC的剪辑 用SelectClipRgn函数来剪辑指定的区DC的剪辑 要剪辑的区域,不一定要是矩形区域,也可以是圆角矩形区域,也可以是圆形区域等。比如: CreateRectRgn(intx1,inty1,intx2,inty2);就是创建矩形区域, CreateRoundRectRgn(intx1,inty1,intx2,inty2,intw,inth)就是创建圆角矩形区域, CreateEllipticRgn(intx1,inty1,intx2,inty2);就是创建圆形区域。DC的剪辑 要剪辑的区域,不一定要是矩形区域,也可以是圆角DC的偏移 DC的偏移就是设置DC绘制的起点坐标位置。默认情况下,DC的绘制起点坐标是在DC左上角的(0,0)位置。 如果我们把这个起点坐标修改了,假如修改成(100,200),那以后往这个DC绘制时,就默认以(100,200)为起点坐标。这时,如果编写TextOut(hdc,0,0,...),就会把字符串绘制在(100,200)上面;如果编写TextOut(hdc,-100,-200,...),就会把字符串绘制在(0,0)上面。DC的偏移 DC的偏移就是设置DC绘制的起点坐标位置。默认DC的偏移 SetViewportOrgEx(HDChdc,intx,inty,LPPOINTlppt); 参数hdc就是要修改绘制起点坐标的DC句柄。 参数x就是新的绘制起点坐标的X坐标位置。 参数y就是新的绘制起点坐标的Y坐标位置。 参数lppt可以用来获取旧的绘制起点坐标,可设置为NULL,代表不获取。DC的偏移 SetViewportOrgEx(HDChdcDC的偏移 GetViewportOrgEx(HDChdc,LPPOINTlppoint);
参数hdc就是要获取绘制起点坐标的DC句柄。 参数lppoint用来获取hdc当前绘制的起点坐标。DC的偏移 GetViewportOrgEx(HDChdc百叶窗特效特效介绍 百叶窗就是把窗口的客户区域分割成N个的条状块。假设按下键盘的E键时,窗口背景就变成白色,然后,依次显示2,4,6,8,10...偶数个的条状块区域,偶数的条状块区域显示完之后,再依次地显示1,3,5,7,9...奇数个的条状块区域。 下页为百页窗显示过程的一张截图。百叶窗特效特效介绍 百叶窗就是把窗口的客户区域分割成N个的百叶窗特效特效介绍百叶窗特效特效介绍百叶窗特效实现思路 首先,获取当前窗口DC中的位图句柄。 然后,获取当前窗口DC位图中的像素颜色数据。 再然后,创建N个位图,每个位图对应百叶窗的每个条状块。每创建完一个新位图之后,把当前窗口DC位图中的指定区块的颜色数据拷贝到新位图的像素数据中。 再然后,就依次绘制2,4,6,8,10...偶数个的条状块区域。 再然后,就依次绘制1,3,5,7,9...奇数个的条状块区域。百叶窗特效实现思路 首先,获取当前窗口DC中的位图句柄。获取位图的像素颜色数据 GetBitmapBits(HBITMAPhbit,LONGcb,LPVOIDlpvBits);
参数hbit就是要获取像素颜色数据的位图句柄。 参数lpvBits就是要接收位图像素颜色数据的缓冲区。 参数cb就是缓冲区lpvBits的大小。获取位图的像素颜色数据 GetBitmapBits(HBITCreateDIBSection创建位图 CreateDIBSection函数的功能就是创建一个应用程序可以直接写入像素颜色数据、与设备无关的位图。该函数提供一个指针,该指针指向位图的像素颜色数据的地方。通过改指针修改数据,最终为该位图写入了像素颜色数据了。CreateDIBSection创建位图 CreateDICreateDIBSection创建位图 HBITMAPCreateDIBSection(HDChdc,CONSTBITMAPINFO*lpbmi,UINTusage,VOID**ppvBits,HANDLEhSection,DWORDoffset);
参数hdc就是设备环境句柄。 参数lpbmi就是一个指向BITMAPINFO结构的指针,该结构指定了设备位图的各种属性,比如位图的维数。
CreateDIBSection创建位图 HBITMAPCCreateDIBSection创建位图 参数iUsage指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型,要么是逻辑调色板索引值(对应的参数值是DIB_PAL_COLORS),要么是原始的RGB值(对应的参数值是DIB_RGB_COLORS)。 参数ppvBits指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。CreateDIBSection创建位图 参数iUsageCreateDIBSection创建位图 参数hSection为文件映射对象的句柄。函数将使用该对象来创建位图,该参数可以是NULL。
参数DwOffset指定从hSection引用的文件映射对象开始处算起的偏移量。在hSection为NULL时,该值被忽略。
返回值:如果函数执行成功,那么返回值就是刚刚创建的位图句柄。如果函数执行失败,返回值为NULL。CreateDIBSection创建位图 参数hSectioBitmap的结构 BMP文件总体上由4部分组成,分别是位图文件头、位图信息头、调色板和图像数据。41Bitmap的结构 BMP文件总体上由4部分组成,分别是位Bitmap的结构 位图文件头包含了图像类型、图像大小、图据存放地址和两个保留未使用的字段。typedefstructtagBITMAPFILEHEADER{WORDbfType; //图像类型DWORDbfSize; //图像大小WORDbfReserved1; //保留未使用的字断WORDbfReserved2; //保留未使用的字断DWORDbfOffBits; //图像数据存放地址}BITMAPFILEHEADER42Bitmap的结构 位图文件头包含了图像类型、图像大小、图Bitmap的结构位图信息头包含了位图信息头的大小、图像的宽高、图像的色深、压缩说明、图像数据的大小和其它一些参数。typedefstructtagBITMAPINFOHEADER{DWORDbiSize; //本结构的大小。LONGbiWidth; //BMP图像的宽度。LONGbiHeight; //BMP图像的高度。WORDbiPlanes; //图像的面数。WORDbiBitCount; //图像的色深,即一个像素用多少位表示。 DWORDbiCompression; //压缩方式,如0表示不压缩,1表示RLE8压缩,2表示RLE4压缩。 DWORDbiSizeImage; //BMP图像数据大小。 LONGbiXPelsPerMeter;//水平分辨率。 LONGbiYPelsPerMeter;//重直分辨率DWORDbiClrUsed;//BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为256。DWORDbiClrImportant; //重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将被辅助驱动程序显示颜色。}BITMAPINFOHEADER;43Bitmap的结构位图信息头包含了位图信息头的大小、图像的宽Bitmap的结构 调色板是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。44Bitmap的结构 调色板是单色、16色和256色图像文件Bitmap的结构调色板的数据结构定义:typedefstructtagRGBQUAD{BYTErgbBlue; //蓝色值BYTErgbGreen; //绿色值BYTErgbRed; //红色值BYTErgbReserved; //保留值}RGBQUAD;45Bi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 求职礼仪及技巧报告范文
- 前期经费调查报告范文
- 2025年度租赁型仓库房东租赁合同及仓储服务协议
- 二零二五年度户外野营安全指导与管理合同
- 二零二五年度土地流转与土地开发项目委托管理服务协议
- 二零二五年度劳动合同主体变更补偿与员工安置及薪酬调整合同
- 2025年度电力节能减排购售电合同
- 二零二五年度文化产业政策研究委托协议
- 二零二五年度农村土地经营权流转与农业科技推广合同
- 二零二五年度个体工商户学徒培训劳动合同
- 2024年3月30日事业单位联考A类《职业能力倾向测验》试题
- DB35T 1816-2019 基层地震灾害紧急救援队能力分级测评
- 现代家政导论-课件 2.1家庭的认知
- 中小企业(民营企业)ESG星级评价
- 电气工程及其自动化职业规划课件
- 社区菜市场改造工程协议
- 《篮球运球》教案(共四篇)
- 高中 语文 必修上册 第八单元《词语积累与词语解释》课件
- 2024年计算机二级WPS考试题库380题(含答案)
- 客观题法律职业资格考试(试卷一)试题及解答参考(2024年)
- 【网红李佳琦直播带货营销策略问题及对策13000字(论文)】
评论
0/150
提交评论