windows编程技术第7章图形程序的编程基础课件

PPT
  • 阅读 63 次
  • 下载 0 次
  • 页数 63 页
  • 大小 483.039 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
windows编程技术第7章图形程序的编程基础课件
可在后台配置第一页与第二页中间广告代码
windows编程技术第7章图形程序的编程基础课件
可在后台配置第二页与第三页中间广告代码
windows编程技术第7章图形程序的编程基础课件
可在后台配置第三页与第四页中间广告代码
windows编程技术第7章图形程序的编程基础课件
windows编程技术第7章图形程序的编程基础课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 63
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】windows编程技术第7章图形程序的编程基础课件.ppt,共(63)页,483.039 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45393.html

以下为本文档部分文字说明:

第7章图形程序的编程基础WindowsGDI的基本概念和原理WindowsGDI及图形设备接口,是Windows系统的重要组成部分,是Windows系统实现图形界面的基础。设备无关性是如何实现的呢?从过程来说,在Windows2000中,有以动态链

接库GDI32.DLL,主要负责图形环境下图形的输出。GDI绘图函数从程序员的角度看,GDI提供了几百个函数调用和一些相关的结构、宏和数据类型,便于程序员对显示器、打印机等硬件设备进行图输出设备描述表;程序有绘图请求时被创建

并得以维持,他负责为程序准备相关的信息,起到为程序屏蔽具体物理设备的作用。当程序希望获得具体物理设备信息时,可以通过一些GDI函数来获得。设备描述表p104什么是设备描述表(devicecontext,DC)在Windows环境下,所有输出都要通过GDI函数。在Windo

ws系统中为每一个设备建立一个数据结构,这个结构记录了设备输出时的详细要求,如文字,画刷等对象,这个数据结构称为设备描述表,即DC。这种把设备抽象成为DC,是实现设备无关性的关键,也就是只要对DC作输出操作,Windows自动把DC中的内容转换

和输出到实际的输出设备上(屏幕或打印机等)通过BeginPaint函数可获得DC,对应的EndPaint函数可释放DC通过GetDC函数可获得DC,对应的ReleaseDC函数可释放DC7.1.1GDI函数及其分类

取得和释放设备描述表代号的函数GetDC,ReleaseDC;BeginPaint,EndPaint;取得字体尺寸信息的函数GetTextMetrics绘图函数TextOut设定和取得设备描述表中有关属性的函数SetTextColor,SetTextAl

ign,使用GDI对象的函数GDI绘图函数GDI函数简介1获取和释放设备描述表的函数GetDCReleaseDCBeginPaintEndPaint2获得设备描述表信息的函数GetTextMetricGetDeviceCaps3使用GDI对象的函数六种可创建的GDI

对象:画笔、画刷、位图、字体、区域、调色板4设置和获取设备描述表属性的函数映射方式,背景色,前景色,绘图模式5GDI绘图函数7.1.2GDI绘制的基本图形直线和曲线直线、矩形、椭圆、弧、Bezier曲线,

折线填入区域当使用了封闭的曲线绘图后,GDI将用画刷填充该区域点阵图GDI支持“与设备有关位图”和“与设备无关位图”GDI提供两种位图之间的转换设备描述表中则采用“与设备有关的位图”7.1.3GDI提供的其他功能映射模式和变换√Meta

file(它是GDI命令的集合,主要用于通过剪贴板传输向量图形)绘图区域√路径裁剪调色盘(板)打印7.2.2取得设备描述表中信息的方法iValue=GetDeviceCaps(hdc,iIndex);其中iIndex为预先定义的整数常量;iValue为返回的对应

的数值信息/*DeviceParametersforGetDeviceCaps()*/#defineDRIVERVERSION0/*Devicedriverversion*/#defineTECHNOLOGY2/*De

viceclassification*/#defineHORZSIZE4/*Horizontalsizeinmillimeters*/#defineVERTSIZE6/*Verticalsizeinmillimeters*/#defineHORZR

ES8/*Horizontalwidthinpixels*/#defineVERTRES10/*Verticalheightinpixels*/#defineBITSPIXEL12/*Numberofbitsperpixel*/#definePL

ANES14/*Numberofplanes*/#defineNUMBRUSHES16/*Numberofbrushesthedevicehas*/#defineNUMPENS18/*Numberofpensthedevicehas*/#

defineNUMMARKERS20/*Numberofmarkersthedevicehas*/7.2.3关于CS_OWNDC设备描述表未使用CS_OWNDC属性caseWM_PAINThdc=BeginPaint(hwnd,&ps);改变设备描述

表的某些属性...........EndPaint(hwnd,&ps);return;设备描述表被释放每次重新获得设备描述表重新进行初始化设定7.2.3关于CS_OWNDC设备描述表使用CS_OWN

DC属性(不提倡)在窗口类的使用中加入CS_OWNDCwndclass.style=CS_HREDRAW|CS_OWNDC;在窗口创建后的WM_CREATE中加入caseWM_CREATE:hdc=GetDC(hwnd);R

eleaseDC(hwnd,hdc);return;staticHDChdc;初始化一次,以后hdc将可以一直使用,直到该窗口被撤销7.2.7色彩在图形界面环境中,色彩是很重要的一部分内容。有了色彩,应用程序才能更加生动地表达自

己的设计思想,更容易与用户交流,用事业是应用程序更加直观。色度学理论认为,任何颜色都可以由红、绿、蓝三种基本颜色按不同的比例混合得到,例如:黄色可以由红、绿各一半混合而成。因此,红、绿、蓝被称为三原色,简称RGB三原色。颜色的表示和设置W

indows采用32位无符号长整数表示色彩,COLORREF值,COLORREFRGB(BYTEbyRed,BYTEbyGreen,BYTEbyBlue);另外,有三个宏可以获取一个COLORREF值中包含的红、绿、蓝分

量值。BYTEGetRValue(DWORDrgb);BYTEGetGValue(DWORDrgb);BYPEGetBValue(DWORDrgb);......31240......2316蓝...

...158绿......70红7.3画线函数和画笔7.3.1处理像素的函数(1)SetPixel此函数用于设置指定点的颜色信息COLORREFSetPixel(HDChdc,intnXPos,intnYPos,COLORREFcrColor);(2

)GetPixel此函数用于获得指定点的颜色信息COLORREFGetPixel(HDChdc,intnXPos,intnYPos);7.3画线函数和画笔7.3.2画线的函数LineTo此函数使用设备描述表中的画笔来画出一条线BOOL

LineTo(HDChdc,intnXEnd,intnYEnd);MoveToEx此函数用于移动画笔到指定的点BOOLMoveToEx(HDChdc,intX,intY,LPPOINTlpPoint);Polyline此函数用于画折线Polyline(HDChdc,LPPO

INTArray,intnumOfPoint);PolylineTo此函数用于画折线,并改变“当前位置”Polyline(HDChdc,LPPOINTArray,intnumOfPoint);把(X,Y)设定为设备描述表的“当前位置”把(

nXEnd,nYEnd)设定为设备描述表的“当前位置”返回原设备描述表的“当前位置”放在lpPoint中把Array中的最后一个点设定为设备描述表的“当前位置”7.3.3画正弦曲线程序SINEWAVE这个程序有一个含

有1000个POINT结构(点对)的数组。随着for循环从0增加到999,结构的x成员设定为从0递增到数组cxClient。结构的y成员设定为一个周期的正弦曲线值,并被放大以填满客户区。整个区县的绘制仅仅使用了一个Polyline调用。

打开编辑程序7.3.5像素偏差问题(自学)绘制曲线(1)Arc此函数以(0,0)为基准点绘制椭圆弧线。在默认情况下,椭圆弧按逆时针方向绘制。BOOLArc(HDChdc,intupX,intupY,intlowX,intlowY,intstartX,i

ntstartY,intendX,intendY);lowX,lowY矩形中心startX,startY已画的圆弧endX,endY绘画方向upX,upY绘制填充区域Rectangle(1)Rectangle从左上角(upX,upY)向右下角(lowX,lowY)绘制矩形.用当前笔画显

示矩形,用当前画刷自动填充矩形.BOOLRectangle(HDChdc,intupX,intY,intlowX,intlowY);lowX,lowYupX,upY绘制填充区域Ellipse(2)Ellipse通过指定椭圆的边界矩形来定义椭圆.BOOLEllipse(HDChdc,i

ntupX,intupY,intlowX,intlowY);lowX,lowYupX,upY绘制填充区域Pie(3)Pie扇形图是一个包含弧和两条线的对象,这两条线分别以弧的端点和中心点为端点BOOLPie(HDChdc,intupX,intupY,intlowX,in

tlowY,intstartX,intstartY,intendX,intendY);lowX,lowY矩形中心startX,startY已画的圆弧endX,endY绘画方向upX,upY绘制填充区域RoundRect(5)RoundRect绘制圆角矩形函数原型

BOOLRoundRect(HDChdc,intupX,intupY,intlowX,intlowY,intcurveX,intcurveY);lowX,lowYcurveXupX,upYcurveY7.3.6LINEDEMO画图程序程序7-3LINEDEMO画一个矩形、一个椭圆、一个圆

角矩形和两条线段。因为在椭圆后面的线遮住了,所以程序表明封闭区域的函数实际上已对这些区域进行了填入。打开编辑程序颜色、画笔和画刷画笔和画刷是应用程序进行图形输出时最常用的工具,应用程序能够选择Windows系统备用的画笔和

画刷进行绘图,也能够创建自定义的画笔和画刷,并将他们选入设备描述表中,按照自定义的风格进行图形绘制。色度学理论认为,任何颜色都可以由红、绿、蓝三种基本颜色按不同的比例混合得到,例如:黄色可以由红、绿各一半混合而成。因此,

红、绿、蓝被称为三原色,简称RGB三原色。7.3。设备描述表的结构p104hBrushhFonthPenhRgnhBitmaphPalettehDCBrush对象结构Font对象结构Pen对象结构Rgn对象结构Bitmap对

象结构Palette对象结构各种驱动..........画图坐标位置7.3.7关于画笔逻辑画笔是一种GDI对象,有线宽、线形、颜色等属性hPen=GetStockObject(WHITE_PEN);hOldP

en=SelectObject(hdc,hPen);在WM_DESTROY消息期间,应用程序即将结束,程序不再需要以创建的逻辑画笔,所以应该将这些画笔删除以释放其占用的系统资源。DeleteObject(hPen);SelectObject(hdc,h

OldPen);画笔程序实例PenCreating.cppGetStockObject参数WHITE_BRUSH0LTGRAY_BRUSH1GRAY_BRUSH2DKGRAY_BRUSH3BLACK_

BRUSH4NULL_BRUSH5HOLLOW_BRUSHNULL_BRUSH创建画笔CreatePen函数HPENCreatePen(intfnPenStyle,intnWidth,COLORREFcrColor);fnPenStyle:确定画笔的线型,Style可以是如下一些样式:PS_D

ASH虚线PS_DASHDOT点划线PS_DASHDOTDOT双点划线PS_DOT点线PS_SOLID实线创建画笔CreatePenIndirect函数HPENCreatePenIndirect(CONSTLOGPEN*lplgpn);typedefstructtagLOGPEN

{UINTlopnStyle;POINTlopnWidth;COLORREFlopnColor;}LOGPEN,*PLOGPEN;创建画笔ExtCreatePen函数此函数扩展了函数CreatePen,可以创

建Cosmetic和Geometric两种类型的画笔。HPENExtCreatePen(DWORDdwPenStyle,DWORDdwWidth,CONSTLOGBRUSH*lplb,DWORDdwStyl

eCount,CONSTDWORD*lpStyle);7.3.8背景模式、背景颜色及其处理点式画笔和虚线画笔的空隙的着色问题空隙的颜色取决于背景的颜色,即取决于设备描述表的两个属性----背景模式(BkMode)和背景颜色(BkC

olor)。内定的背景模式为OPAQUE(不透明),在这种方式下,Windows使用背景颜色来填入空隙,内定的背景色为白色。SetBkColor(hdc,crColor);//设置背景色也就改变了空隙颜色如果将背

景模是内定为TRANSPARENT(透明),那么背景色就不能再设置,SetBkMode(hdc,TRANSPARENT);//将阻止Windows应用程序填入空隙。7.4画刷相关函数和结构CreateSolidBrush此函数用于创建一个solid画刷(solid画刷使用指定的颜

色定义的纯色画刷)。创建这种类型的画刷很容易GetStockObject此函数用于创建一个stock画刷,stock画刷是由GDI提供的备用画刷,共有7种。CreateHatchBrush此函数用于创建一个hatch画刷,hatch画刷是以一定的图案进行填充的位图

,图形不在以纯色填充,而是一些纹理图案。CreatePatternBrush该函数用于创建基于GDI位图的pattern画刷。pattern画刷是一种自定义风格的画刷,用户根据程序定义的GDI位图或者DIB(设备无关位图)能创建出基于位图的画刷。使用这种画刷,

应用程序可以获得更加美观的填充方案。CreateBurshIndirect此函数使用定义的结构间接创建画刷。GetStockObjectHBRUSHGetStockObject(intfnObject);此函数用于创建一个stock画刷,stock画刷是由GDI提供的

备用画刷,共有7种。#defineWHITE_BRUSH0#defineLTGRAY_BRUSH1#defineGRAY_BRUSH2#defineDKGRAY_BRUSH3#defineBLACK_BRUSH4#defineNULL_BRUSH5#defineHOLL

OW_BRUSHNULL_BRUSHCreateSolidBrush此函数用于创建一个solid画刷(solid画刷使用指定的颜色定义的纯色画刷)。创建这种类型的画刷很容易HBRUSHCreateSolidBrush(COLORREFcrColor);CreateBurshI

ndirect此函数使用定义的结构间接创建画刷。HBRUSHCreateBrushIndirect(CONSTLOGBRUSH*lplb);CreateHatchBrush此函数用于创建一个hatch画刷,hatch画刷是以一定的图案进行填充的位图,图形不在

以纯色填充,而是一些纹理图案。HBRUSHCreateHatchBrush(intfnStyle,COLORREFclrref);CreatePatternBrush该函数用于创建基于GDI位图的pattern画刷。pattern画刷是一种自定义风格的画刷,用户根据程序定

义的GDI位图或者DIB(设备无关位图)能创建出基于位图的画刷。使用这种画刷,应用程序可以获得更加美观的填充方案。HBRUSHCreatePatternBrush(HBITMAPhbmp)画刷程序实例Brus

hCreating.cpp我想画我想画一艘船船上有桅杆桅杆上有一面旗子船的形状由直角坐标系的数学模型构成的船有20米长。我画了一艘船船有20米长。我按数学模型在屏幕上用绘图函数绘制了出来我纳闷?????船倒过来了......,在一个角落上.....,只看到了船的一部分.....,太

小了......,我发挥我的数学才能我修改了所有数学模型的坐标数据。我累死了........这件工作足足花去了我2个星期.......而且还不能保证完全正确.......但我终于画出来了。。。我想应该有更好的方法GDI映射模式为我解决了问题7

.5GDI映射方式1.坐标系统2.几种映射模式的比较3.窗口和视口4.映射模式程序实例MapMode坐标系统1.在Windows应用程序中,有两种坐标系统:设备坐标和逻辑坐标。2.设备坐标系统直接与硬件设备的显示相关,以像素为度量单位。水平轴(即x轴)的正方向从左向右,垂直轴(即

y轴)的正方向从上向下,并且整个坐标轴的单位和方向固定不变。3.逻辑坐标系统与设备描述表的属性映射模式相关,他是一种允许自定义的坐标系统,坐标轴方向、单位和原点位置都可以重新定义。4.逻辑坐标系统下绘出的图形必须映射到设备坐

标系统下,才能在屏幕上显示出来。几种映射模式的比较intSetMapMode(HDChdc,intmode);说明:mode指定新的映射模式,映射方式逻辑单位坐标系正方向MM_TEXT像素Y向下,X向右MM_LOMETRIC

0.1毫米Y向上,X向右MM_HIMETRIC0.01毫米Y向上,X向右MM_LOENGLISH0.01英吋Y向上,X向右MM_HENGGLIST0.001英寸Y向上,X向右MM_TWIPS1/1440英寸Y向上,X向右MM_ISOTROPIC任意(

x=y)可选MM_ANISOTROPIC任意(x=y)可选说明:mode指定新的映射模式,可以由如下一些情况视口和窗口1.视口和窗口是WindowsGDI种两个很重要的概念,从逻辑坐标映射为设备坐标实际上就是从视口和窗口的映射。2.视口是基于设备坐标的,他以像素

为单位,指定视口的新的水平尺寸和垂直尺寸,即物理上的Xextent点相当于逻辑上1点,起到放大图形的效果。3.视口有视口原点和视口范围两个基本属性:4.窗口是以逻辑单位为单位指定窗口的新的水平尺寸和垂直尺寸,即逻辑上的Xexten

t点相当于物理上1点,起到缩小图形的效果。视口函数BOOLSetViewportExtEx(HDChdc,intXextent,intYextent,LPSIZEsize);调用后,原来物理单位的尺寸则被存放到size所指定的结构变量中.窗口函数BOOL

SetWindowExtEx(HDChdc,intXextent,intYextent,LPSIZEsize);视口与窗口函数组合SetMapMode(hdc,MM_ANISOTROPIC);SetViewportExtEx(hdc,3,

3,&size);SetWindowExtEx(hdc,2,2,&size);(放大1.5倍SetWindowExtEx中的Xextent=2,SetViewportExtEx中的Xextent=3)(Xextent=1,Yextent=1)Mov

eToEx(hdc,0,0,NULL);LineTo(hdc,100,100);SelectObject(hdc,hRedpen);MoveToEx(hdc,0,100,NULL);LineTo(hdc

,100,0);视口与窗口函数组合SetMapMode(hdc,MM_ANISOTROPIC);SetViewportExtEx(hdc,3,3,&size);SetWindowExtEx(hdc,2,2,&size);

SetViewportOrgEx(hdc,50,50,);MoveToEx(hdc,0,0,NULL);LineTo(hdc,100,100);SelectObject(hdc,hRedpen);MoveToEx(hdc,0,100,NUL

L);LineTo(hdc,100,0);BOOLSetViewportOrgEx(HDChdc,intX,intY,LPPOINTOldOrg);说明:X,Y是以像素为单位的新的视区原点,调用后,原来的视区原点则被存放在OldOrg指向的POI

NT结构中,设置视区原点BOOLSetViewportOrgEx(HDChdc,intX,intY,LPPOINTOldOrg);说明:X,Y是以像素为单位的新的视区原点,调用后,原来的视区原点则被存放在OldOrg指向的POINT结构中,(X=50,Y=50)MapMode7.6位

图(补充)位图是Windows应用程序中存储图像信息的方法之一。用于表示来自真实世界的复杂图像。从结构上来说,位图是一个二维像素位数组,通常按照从左向右、自顶向下的顺序记录各像素位的信息。7.6.1设备相关位图DDB

DDB位图程序实例screensnap.c7.6.5设备无关位图DIBDIB位图程序实例DIBtoDDB.c7.6.1创建DDB位图(1)CreateCompatibleBitmap此函数用于创建彩色的位图(包括真彩色)。他实际创建了与

指定设备或设备描述表兼容的位图,该位图有与指定设备一样的颜色结构。HBITMAPCreateCompatibleBitmap(HDChdc,intnWidth,intnHeight);hBrushhFonthPenhRgnhBitmaphPalettehDCBrush

对象结构Font对象结构Rgn对象结构Bitmap对象结构(点阵图形)Palette对象结构各种驱动..........画图坐标位置Pen对象结构Bitmap对象结构(自定义一个点阵图形)7.6.2内存设备描述表内存设备描述表位于内存中,并不是真正的图形输出设备

,程序也不能直接显示存储在其内的信息。同时,创建的GDI位图对象仅能被选入内存设备描述表中。由于这些特性,在位图的输出过程中,内存设备描述表发挥了巨大的作用,可是实现许多特殊的位图显示效果。例如,程序可以在选入内存设备描述表种的位图中绘图,然后“拷贝”到显示设

备描述表中进行显示;通过创建多个内存设备描述表,可以对选入其内的位图进行像素位的光栅操作,以实现某些特殊的显示效果。HDChdcMem=CreateCompatibleDC(hDC);HBITMAPhmemBM=CreateCompatibleBitmap(hDC);SelectObj

ect(hdcMem,hmemBM);7.6.2内存设备描述表HDChMemDC=CreateCompatibleDC(hDC);hBrushhFonthPenhRgnhBitmaphPaletteh

MemDCBrush对象结构Font对象结构Rgn对象结构Bitmap对象结构(缺省的空内容)Palette对象结构各种驱动..........画图坐标位置Pen对象结构Bitmap对象结构(自定义一个点阵图形)HBITMAPhmemB

M=CreateCompatibleBitmap(hDC)SelectObject(hMemDC,hmemBM);Font对象结构Rgn对象结构Palette对象结构hBrushhFonthPenhRgnhBitmaphPalettehDCBrush对象结构各种驱动..........画图坐标

位置Pen对象结构Bitmap对象结构(点阵图形)7.6.3DDB位图操作函数BitBltHDChMemDC=CreateCompatibleDC(hDC);hBrushhFonthPenhRgnhBitmaphPalettehMemDCBrush对

象结构Font对象结构Rgn对象结构Bitmap对象结构(缺省的空内容)Palette对象结构各种驱动..........画图坐标位置Pen对象结构HBITMAPhmemBM=CreateCompatibleBitmap(hDC)SelectObject(hMemDC,hmemBM);Fo

nt对象结构Rgn对象结构Palette对象结构hBrushhFonthPenhRgnhBitmaphPalettehDCBrush对象结构各种驱动..........画图坐标位置Pen对象结构Bitmap对象结构(点阵

图形)BitBlt(hDC,X0,Y0,Width,Height,hMemDC,X1,Y1,SRCCOPY);Bitmap对象结构(点阵图形)7.6.3DDB位图操作函数BitBltBOOLBitBlt(HDChdcDest,intnXOrignDes

t,intnYOrignDest,intnWidth,intnHeight,HDChdcSrc,intnXOrignSrc,intnYOrignSrc,DWORDdwRop);/*Ternaryrasteroperation

s*/#defineSRCCOPY(DWORD)0x00CC0020/*dest=source*/#defineSRCPAINT(DWORD)0x00EE0086/*dest=sourceORdest*/#defineSRCAND(DWORD)0x0088

00C6/*dest=sourceANDdest*/#defineSRCINVERT(DWORD)0x00660046/*dest=sourceXORdest*/#defineSRCERASE(DWORD)0x00440328/

*dest=sourceAND(NOTdest)*/#defineNOTSRCCOPY(DWORD)0x00330008/*dest=(NOTsource)*/#defineNOTSRCERASE(DWORD)

0x001100A6/*dest=(NOTsrc)AND(NOTdest)*/#defineMERGECOPY(DWORD)0x00C000CA/*dest=(sourceANDpattern)*/#defineMERGEPAINT(DWORD)0x00BB0226/*dest=(NOT

source)ORdest*/#definePATCOPY(DWORD)0x00F00021/*dest=pattern*/#definePATPAINT(DWORD)0x00FB0A09/*dest=DPSnoo*/

#definePATINVERT(DWORD)0x005A0049/*dest=patternXORdest*/#defineDSTINVERT(DWORD)0x00550009/*dest=(NOTdest)*/#defineBLACKN

ESS(DWORD)0x00000042/*dest=BLACK*/#defineWHITENESS(DWORD)0x00FF0062/*dest=WHITE*/7.6.3BitBlt参数示例程序caseWM_PAINT:hDC=BeginPaint(hwnd,&ps);hMemDC=Create

CompatibleDC(hDC);hBitmap=LoadBitmapFile(hDC,"CLOUDS.BMP");hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBi

tmap);GetObject(hBitmap,sizeof(BITMAP),&bitmap);BitBlt(hDC,0,0,bitmap.bmWidth,bitmap.bmHeight,hMemDC,0,0,SRCCOPY);SelectObject(hMemDC,hOldBitmap);De

leteObject(hBitmap);hBitmap=LoadBitmapFile(hDC,"BP.BMP");SelectObject(hMemDC,hBitmap);GetObject(hBitmap,sizeof(BITMAP),&bit

map);BitBlt(hDC,100,80,bitmap.bmWidth,bitmap.bmHeight,hMemDC,0,0,SRCCOPY);SelectObject(hMemDC,hOldBitmap);DeleteObject(hBitmap);DeleteDC(h

MemDC);EndPaint(hwnd,&ps);return0;7.6.3BitBlt参数示例图7.6.4实现位图透明的方法前景:透明的地方为白色,不透明的地方可以任意色(A)背景:任意色(XY)增加一个与前景位图大小一样的黑白位图(Mask),前景中需要透明的

地方使该Mask为黑色,而不透明的地方使该Mask为白色两次调用BitBlt实现:(背景按位或SRCPAINTMask)按位与SRCAND前景人:(X|1)&AA底:(Y|0)&1Y或=〉与=〉7.6.5设备无关位图与DDB位图相比,DIB是一种外部的

位图格式,经常存储为以BMP为后缀的位图文件(有时也以DIB为后缀),非常适于图像交换。要点:DIB位图的结构DIB位图的显示和装载DIB位图转换DDB位图7.6.6DIB位图的结构应用程序可以完全访问DIB为图的内容,并把他们加载到内存中;也可以创建

自己定义的DIB为图,并把他们存入Windows的为图文件(BMP)中。需要结构:.位图文件头结构BITMAPFILEHEADER.位图信息结构BITMAPINFOHEADER.位图颜色表RGBQUAD.位图像素数据7.6.7DIB

位图的显示和装载SetDIBitsToDevice此函数用于显示DIB位图,与用于显示DDB位图的函数BitBlt一样,该函数并不对位图进行拉伸或缩放操作,图像始终被正确地定位。intSetDIBitsToDevice(

HDChdc,intXdest,intYdest,DWORDdwWidth,DWORDdwHeight,intxSrc,intySrc,UNITuStartScan,UNITcScanLines

,CONSTVOID*lpvBits,CONSTBITMAPINFO*lpbmi,UINTfuColorUse);7.6.8DIB位图转换DDB位图DDB位图可以保存在设备描述表中,并且有绘制速度快等特点,在Windows应用程序中使用较为广泛。

CreateDIBitmap此函数用于将DIB位图转换为DDB位图。HBITMAPCreateDIBitmap(HDChdc,CONSTBITMAPINFOHEADER*lpbmih,DWORDfdwInit,CONSTVOID*lpbInit,CO

NSTBITMAPINFO*lpbmi,UINTfuUsage);7.6.9LoadBitmapLoadBitmap在资源文件中定义位图后,利用此函数装载DIB位图并得到转换后的DDB位图句柄。HBITMA

PLoadBitmap(HINSTANCEhInst,LPCTSTRlpBitmapName);

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?