本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:940231
建立时间:2005年5月17日




[work]Windows CE图形特性 (MSDN)
文章收藏

oceanblue 发表于 2009/5/9 21:48:10

  在Microsoft® Windows® CE操作系统和其他的Microsoft Win32® 操作系统中,控制文本和图形显示的子系统称为图形设备接口(Graphics Device Interface,简称GDI)。与桌面产品类似,Windows CE GDI在显示设备和打印设备上绘制直线、曲线、闭图形、文本和位图图像。 在Windows CE 2.0中,对GDI功能进行了扩展,包括了许多其他Win32应用程序编程接口(API)中高级图形特性。优良的图形显示从此不再局限于桌面计算机;GDI让基于 Windows CE的设备可以创建吸引人的、有用的图形。 本文着眼于讨论GDI的每一个特性。着重讨论对Windows CE 1.0所作的改进或者实质性的修改。文章还讨论了这每一个特性与标准的基于Win32的应用程序编程接口的差别。 在这篇文章中,GDI仅仅指Window CE子系统,不是等价于其他基于Windows的平台。 设备上下文 设备上下文(Device Context,简称DC)是一种结构,GDI用它来保存图形对象的信息,这些信息决定了文本和图形在显示器和打印机上的外观。用来决定显示的笔、刷子、字体、颜色和位图的类型都保存在设备上下文中。 Windows CE支持下表所描述的设备上下文。 设备上下文类型 目的 显示器 支持视频显示器上的绘制操作 打印机 支持打印机上的绘制操作 内存 支持设备独立位图的绘制操作 应用程序绝对不可以直接访问设备上下文;它通过调用可以访问DC的函数间接操纵设备上下文结构。 可以通过调用BeginPaint 函数获得指向设备上下文的句柄。通过GetDC 函数获得设备上下文,通过CreateDC和CreateCompatibleDC函数创建设备上下文。 2.0版本中的新特性 在2.0版本中改进了内存设备上下文,它现在可以与显示DC完全兼容了。打印DC是2.0中的新特性。 与其它基于Win32的平台的差异 Windows CE不支持信息设备上下文。 图形绘制和填充 除了简单的直线绘制功能以外,GDI还可以使用下列功能绘制更多的图形: 函数名称 目的 Ellipse 绘制和填充椭圆 Polygon 绘制和填充用户定义的图形 Polyline 由一系列连接的直线段构成,最终的折线可以构成任何形状 Rectangle 绘制和填充矩形 RoundRect 绘制和填充圆角矩形 2.0版本的新特性 在2.0版本中,修改了polygon函数,在此基础上可以正确的填充凹多边形和自相交多边形。自相交多边形是指在绘制时,两条边交叉的多边形。 与其他基于Win32的平台GDI不同的是,它既不支持路径或非矩形区域的创建,也不支持LineTo和MoveTo函数。此外,GDI不支持创建下列图形和直线的函数。 弧线 Bezier曲线 可变基准线 饼图 PolyPolygon PolyPolyline 笔和刷子 笔是用于绘制直线的图形对象GDI;刷子是用于填充闭图形内部的图形对象。 笔 BLACK_PEN和WHITE_PEN都可以以各自的颜色绘制一个像素宽的实线。这些笔以及不绘制任何图形的NULL_PEN都是库里存放的GDI笔。可以使用GetStockObject函数选择库存的笔。 CreatePen和CreatePenIndirect函数可以用来创建不同于库存笔的函数。这些函数可以让用户定义笔的线宽、颜色和样式。下面罗列了可能支持的笔的样式: 笔的样式 功能描述 PS_SOLID 绘制实线 PS_DASH 绘制虚线 PS_NULL 不绘制任何线 刷子 库存的刷子和库存的笔一样,可以利用SelectObject函数选进设备环境中。CreateDIBPatternBrushPt函数可以用来创建任何尺寸的刷子。图案刷子可以是任何一种颜色或者颜色的组合。 2.0版本的新特性 带有颜色的笔、带有颜色和图案的刷子都是2.0版本中的新特性。 与其他基于Win32的平台的差异 GDI可以支持宽笔和绘制虚线的笔,但是它不支持绘制虚线的宽笔、绘制点线的笔、内部边框笔、任何用于自定义的端盖样式(例如PS_ENDCAP_ROUND). Windows CE不支持带有阴影线的刷子。但是可以通过CreateDIBPatternBrushPt函数创建定制刷子达到这样的效果。 Windows CE可以支持Microsoft Windows NT® 操作系统支持的多尺寸图案刷子。Microsoft Windows 95操作系统仅仅支持标准的8*8像素的刷子。 位块传输函数 位块传输函数(Bit block transfer,简称blts)用来传输、改变位图。有四种blt函数--PatBlt、BitBlt、MaskBlt、StretchBlt,以及一个相关函数TransparentImage。 Blt函数对像素进行逐位布尔操作,一般称之为光栅操作编码(raster operation code,简称ROPS)。下面的表格描述了ROP编码和使用它们的blt函数。 ROP类型 描述 ROP2 将笔或刷子与目标位图按照16种方式之一进行结合。 ROP3 将刷子、源位图和目标位图按照256种方式之一结合 ROP4 使用二进制位“掩码”位图结合前景ROP3和背景ROP3。掩码使用0和1标记使用ROP3的位   BLT函数 描述 PatBlt 使用选择的刷子和ROP3码绘制选定的矩形 BitBlt 使用选定的刷子、源位图和ROP3码绘制选定的矩形 MaskBlt 使用两个位图和ROP4码绘制给定的矩形 StretchBlt 将位图从源矩形拷贝到目标矩形,把源位图按照目标矩形的尺寸进行拉伸或压缩 TransparentImage 拷贝位图,省略透明颜色绘制的部分 Blt函数和ROP码给应用程序编程人员提供强大的、非常有用的工具集,可以用来移动、结合、转换位图。 2.0版本的新特性 1.0版本仅仅支持一部分ROP码;但是在2.0版本中完全获得支持。在新的版本中已经改进了StretchBlt函数,这样被拉伸的图像与源图像更加相似。1.0版本中不支持图像倒置,但是在2.0得到了完全支持。TransparentImage是2.0版本的新特性。 颜色 Windows CE 2.0版本中最令人激动的是增加了对颜色的支持。新的Windows CE GDI支持其他基于Windows的32位平台所支持的所有颜色。 显示设备或操作系统支持的颜色范围主要由它所支持的像素深度所决定。像素深度是用位/像素(bpp)来决定的。每一个位可以是0或者1。仅仅支持1bpp的显示器只支持黑白两种颜色。像素深度为2 bpp可以支持四种颜色(两位的所有可能的结合情况)值:黑色、白色、浅灰色、深灰色。一般情况下,所支持的颜色个数是2的幂函数,其指数是像素的深度。 新的Windows CE GDI支持的颜色深度是1、2、4、8、16、24和32 bpp。更高端像素深度可以支持真彩色显示器,低端的像素深度仅仅支持黑白显示器和应用程序。 GDI颜色系统不仅仅十分强大,而且非常通用。它可以支持不同像素深度的位图之间进行位块传输。这一切都归功于 GDI使用了设备无关位图(device-independent bitmap,简称DIB)。DIB在内部存储数据,独立于任何一种显示器或者打印设备。它自带颜色信息,可以以许多颜色格式显示或者打印,这依赖于显示器或者打印机硬件的性能。几乎所有的GDI图形信息都是以DIB格式进行存储的。 2.0版本的新特性 颜色是2.0版本的新特性。1.0版本仅仅支持1bpp和2bpp的像素深度。 与其他基于Win32的平台的差异 Windows CE支持2bpp像素深度,其他32位Windows平台中不支持这个。 Windows CE不支持抖动 Windows CE不支持压缩位图格式,例如行程长度编码(run-length encoded,简称RLE)位图。 调色板 GDI可以让基于Windows CE的应用程序和显示设备联合确定图形显示的最优方式。应用程序需要使用GetDeviceCaps函数访问显示设备的特征。这样就可以根据设备的最佳显示策略创建设备上下文。 GDI支持调色板和非调色板颜色显示设备。调色板设备在显卡中包括自己内置的颜色调色板;GDI扫描设备显卡中的颜色编码,在颜色表中查找相应的颜色。 调色板设备直接在帧缓冲区像素中进行编码。它们使用像素的位值直接定义颜色,而不使用硬编码调色板。 一旦设备上下文的颜色性能确定了,应用程序就可以使用CreatePalette 函数创建调色板,然后使用SelectPalette将它选进当前的设备上下文。通过这两个函数创建和选择的调色板是逻辑调色板,不同于显示设备使用的系统调色板。RealizePalette函数使系统恢复当前选中的逻辑调色板中的值。 2.0版本中的新特性 颜色调色板和它们相关的函数是2.0版本中的新特性。 与其它基于Win32平台的差异 从编程人员的角度来看,Windows CE和其他Win32操作系统的最大差别是Windows CE不判断后台应用程序调色板和前台应用程序调色板的优先级。运行在前台的应用程序可以完全控制系统调色板。正是因为这样,强烈建议基于Windows CE的应用程序只使用库存调色板中的前十种和后十种颜色,即所谓的"Windows颜色"。即使使用这些颜色的应用程序在后台运行,它们也可以适当的显示,但是使用其它颜色的应用程序就不能了。 字体 GDI支持TrueType® 字体和光栅字体,但是在给定的平台上只可以使用其中的一种。 TrueType字体的轮廓不是通过像素模式定义的,而是由直线和曲线的编码集合决定的,相反光栅字体是由前者决定的。TrueType字体可以被重新调节甚至是旋转。GDI支持所有的Windows标准TrueType字体文件。 2.0版本中的新特性 TrueType字体是2.0版本中的新特性。1.0版本只支持光栅字体。 打印 GDI支持完全的图形打印。 2.0版本中的新特性 打印是Windows CE 2.0的新特性。 与其它基于Win32平台的差异 Windows CE既没有打印机管理器,也不支持假脱机打印或多份打印。打印是单线程,因为一次只允许一个应用程序打印。 显示器特征 Windows CE支持剪辑区域,这可以让应用程序将它们的输出限定在客户区域的某一个子区域上。剪辑区域必须选进给定设备的设备上下文中。 与其它基于Win32平台的差异 Windows CE 不支持多种映射模式。GDI仅仅支持文本映射模式(基于Win32的桌面平台称为MM-TEXT模式),这种方式按照文本的读入方式将位图映射到显示设备,即从左到右,从上到下。视点的初始位置是显示区域的左上角,可以使用SetViewPointOrg函数改变。 小技巧 主要运行在2-bpp或者4-bpp显示设备上的应用程序在任何时候都应该避免使用8-bpp位图,因为颜色转换将会降低blt操作的速度。 IUsage参数在所有函数中应该设置为DIB_RGB_COLORS。但是当使用8-bpp位图的时候它可以被设置称为DIB_PAL_COLORS,这样BITMAPINFO 结构中的bmiColors数组成员的值将会被忽略。 总结 Windows GDI是一个功能完善的图形系统,支持下列特性。 GDI特性 支持的属性 图形绘制 Ellipse、Polygon、Polyline、Rectangle、RoundRect 笔和刷子 虚线、点线、宽的、实线笔;多尺寸刷子 Blt函数 PatBlt、BitBlt、MaskBlt、StretchBlt、TransparentImage ROP编码 ROP2、ROP3和ROP4码 颜色 1、2、4、8、16、24和 32 bbp像素深度 调色板 调色板和非调色板设备支持 字体 TrueType和光栅字体 打印 图形打印 Windows CE的功能,包括GDI,既没有基于Win32的桌面系统强大,也没有打算实现如此强大的功能。Windows CE设备不需要的显示和打印函数已经从GDI中删除了。因此GDI是一个空间占有量较小的、强大的、真彩色的图形显示系统。它的小尺寸和多功能性使得它可以在许多Windows CE设备上显示文本和图形,其中有一些还是目前无法想象的。 posted @ 2009-03-28 21:33 梦幻石头 阅读(12) | 评论 (0) | 编辑 透明位图的显示(作者:王俊) http://www.vckbase.net/document/viewdoc/?id=532 包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。一、TransparentBlt 函数的使用 TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。TransparentBlt函数原型如下: BOOL TransparentBlt( HDC hdcDest, // 目标DC int nXOriginDest, // 目标X偏移 int nYOriginDest, // 目标Y偏移 int nWidthDest, // 目标宽度 int hHeightDest, // 目标高度 HDC hdcSrc, // 源DC int nXOriginSrc, // 源X起点 int nYOriginSrc, // 源Y起点 int nWidthSrc, // 源宽度 int nHeightSrc, // 源高度 UINT crTransparent // 透明色,COLORREF类型 ); 使用示例: CBitmap FootballBMP; FootballBMP.LoadBitmap(IDB_FOOTBALLBMP); CDC ImageDC; ImageDC.CreateCompatibleDC(pDC); CBitmap *pOldImageBMP = ImageDC.SelectObject(&FootballBMP); TransparentBlt(pDC->m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218, 199, RGB(0,0,0xff)); ImageDC.SelectObject(pOldImageBMP);   二、TransparentBlt2,类似于TransparentBlt的实现原理 void TransparentBlt2( HDC hdcDest,      // 目标DCint nXOriginDest,   // 目标X偏移int nYOriginDest,   // 目标Y偏移int nWidthDest,     // 目标宽度int nHeightDest,    // 目标高度HDC hdcSrc,         // 源DCint nXOriginSrc,    // 源X起点int nYOriginSrc,    // 源Y起点int nWidthSrc,      // 源宽度int nHeightSrc,     // 源高度UINT crTransparent  // 透明色,COLORREF类型){HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图HDC hImageDC = CreateCompatibleDC(hdcDest);HDC hMaskDC = CreateCompatibleDC(hdcDest);hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);// 将源DC中的位图拷贝到临时DC中if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);elseStretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);// 设置透明色SetBkColor(hImageDC, crTransparent);// 生成透明区域为白色,其它区域为黑色的掩码位图BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);// 生成透明区域为黑色,其它区域保持不变的位图SetBkColor(hImageDC, RGB(0,0,0));SetTextColor(hImageDC, RGB(255,255,255));BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);// 透明部分保持屏幕不变,其它部分变成黑色SetBkColor(hdcDest,RGB(255,255,255));SetTextColor(hdcDest,RGB(0,0,0));BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);// "或"运算,生成最终效果BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);// 清理、恢复 SelectObject(hImageDC, hOldImageBMP);DeleteDC(hImageDC);SelectObject(hMaskDC, hOldMaskBMP);DeleteDC(hMaskDC);DeleteObject(hImageBMP);DeleteObject(hMaskBMP);}


阅读全文(6939) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144755475 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号