tBkModehDC TRANSPARENT xxxvii. xxxviii. ::DrawText 1. hDC 2. bstrText.m_str 3. bstrText.Length 4. amprectClient 5. DT_WORDBREAK 6. //输出 xxxix. ifl3D gt 0 xl. 1. SetTextColorhDC ::GetSysColorCOLOR_3DHILIGHT 2. SetBkModehDC TRANSPARENT 3. rectClient.left rectClient.left l3D 4. rectClient.top rectClient.top - 1 5. rectClient.right rectClient.right l3D 6. rectClient.bottom rectClient.bottom - 1 7. ::DrawText a hDC b lpText c wcslenlpText d amprectClient e DT_WORDBREAK xli. xlii. SelectObjecthDC hOldFont xliii. DeleteObjecthFont xliv. DeleteObjecthBBg xlv. SaveDCBmphDC hBitmap vFileName xlvi. //SaveDCJPGhDC hBitmap vFileName xlvii. DeleteObjecthBitmap xlviii. ::ReleaseDCNULL hDC xlix. return 0 此函数功能通过输入特定长度的文本输出图像到指定文件 参数说明 vFileName: 图像保存文件路径 lpText: 图像输出文本 lpBgImg: 图像背景路径 lCSet: 字符集 lpFont: 字体名称 lWidth: 图像输出宽度 lHeight: 图像输出高度 lLeft: 图像输出左边距与右边距相同 lTop: 图像输出上边距与下边距相同 llfHeight: 文本输出字体高度字体宽度随高度等比例变化 lWeight: 文本重量 l3D: 三D效果值为0时无三D效果大于0时其值为字体偏移量 程序i. 至 viii. 行对输入参数合法性进行检查及究正。
行ix. x. 定义及创建与指定设备兼容的设备上下文句柄hDC。
行xi. 至 xviii.1 行定义LOGFONT 逻辑字体结构并填充。
通过CreateFontIndirectamplf 创建字体并调用SelectObjecthDC hFont将创建字体选入设备上下文原字体句柄保存在hOldFont里。
xix. 至 xxiv. 行取得输入文本长度在当前字体环境下调用DrawText函数计算输出矩形并将其矩形保存在rectClient里以便调整DC输出矩形大小。
行xxvi. 利用上面计算出的长宽创建位图句柄行xxvii.将其选入设备上下文准备工作完毕绘图工作正式开始。
在此函数中画笔及刷子我们使用系统默认设置不再重复申请。
行xxxii.判断三D偏移量是否大于零如果不为零输出三D效果。
行xxxviii.在新矩形下输入文本。
如果有三D输出请求将矩形偏移l3D个像素再次输出文本以显示三D效果。
xlii. 行选入旧字体。
xliii. 行以后删除对象保存位图及恢复现场。
保存位图功能SaveDCBmp将在下节讨论。
二 位图文件 一、位图文件结构 位图文件由三部分组成文件头 位图信息 位图像素数据 1、位图文件头 位图文件头主要用于识别位图文件。
以下是位图文件头结构的定义 typedef struct tagBITMAPFILEHEADER WORD bfType DWORD bfSize WORD bfReserved1 WORD bfReserved2 DWORD bfOffBits BITMAPFILEHEADER 其中的bfType值应该是“BM”0x4d42标志该文件是位图文件。
bfSize的值是位图文件的大小。
bfReserved1 bfReserved2 为保留字值为0。
bfOffBits为位图文件大小与DIB设备无关的位图 Device-indepentent bitmap位图数据的大小之差。
如 BITMAPFILEHEADER bmfHdr bmfHdr.bfType 0x4D42 // quotBMquot dwDIBSize sizeofBITMAPFILEHEADER sizeofBITMAPINFOHEADER dwPaletteSize dwBmBitsSize bmfHdr.bfSize dwDIBSize bmfHdr.bfReserved1 0 bmfHdr.bfReserved2 0 bmfHdr.bfOffBits DWORDsizeofBITMAPFILEHEADER DWORDsizeofBITMAPINFOHEADER dwPaletteSize 2、位图信息 位图信息中所记录的值用于分配内存设置调色板信息读取像素值等。
以下是位图信息结构的定义 typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader RGBQUAD bmiColors1 BITMAPINFO 可见位图信息也是由两部分组成的位图信息头 颜色表 2.1位图信息头 位图信息头包含了单个像素所用字节数以及描述颜色的格式此外还包括位图的宽度、高度、目标设备的位平面数、图像的压缩格式。
以下是位图信息头结构的定义 typedef struct tagBITMAPINFOHEADER DWORD biSize LONG biWidth LONG biHeight WORD biPlanes WORD biBitCount DWORD biCompression DWORD biSizeImage LONG biXPelsPerMeter LONG biYPelsPerMeter DWORD biClrUsed DWORD biClrImportant BITMAPINFOHEADER biSize 结构BITMAPINFOHEADER的字节数即sizeofBITMAPINFOHEADER biWidth 以像素为单位的图像宽度 biHeight 以像素为单位的图像长度 biplanes 目标设备的位平面数 biBitCount 每个像素的位数 对于每个像素的位数分别有一下意义 0用在JPEG格式中 1单色图调色板中含有两种颜色也就是我们通常说的黑白图片 416色图 8256色图通常说的灰度图 1664K图一般没有调色板图像数据中每两个字节表示一个像素5个或6个位表示一个RGB分量 2416M真彩色图一般没有调色板图像数据中每3个字节表示一个像素每个字节表示一个RGB分量 324G真彩色一般没有调色板每4个字节表示一个像素相对24位真彩图而言加入了一个透明度即RGBA模式 biCompression 图像的压缩格式这个值几乎总是为0 biSizeImage 以字节为单位的图像数据的大小对BI_RGB压缩方式而言 biXPelsPermeter 水平方向上的每米的像素个数 biYpelsPerMeter 垂直方向上的每米的像素个数 biClrused 调色板中实际使用的颜色数这个值通常为0 biClrImportant 现实位图时必须的颜色数 这个值通常为0表示所有的颜色都是必需的 2.2颜色表 颜色表一般是针对16位以下的图像而设置的对于16位和16位以上的图像由于其位图像素数据中直接对对应像素的RGBA颜色进行描述因而省却了调色板。
而对于16位以下的图像由于其位图像素数据中记录的只是调色板索引值因而需要根据这个索引到调色板去取得相应的RGBA颜色。
颜色表的作用就是创建调色板。
颜色表是由颜色表项组成的颜色表项结构的定义如下 typedef struct tagRGBQUAD // rgbq BYTE rgbBlue BYTE rgbGreen BYTE rgbRed BYTE rgbReserved RGBQUAD rgbBlue 蓝色的强度 rgbGreen 绿色的强度 rgbRed 红色的强度 rgbReserved 保留字为0 其中需要注意的问题是RGBQUAD结构中的颜色顺序是BGR而不是平常的RGB。
3、位图数据 最后在位图文件头、位图信息头、位图颜色表之后便是位图的主体部分位图数据。
根据不同的位图位图数据所占据的字节数也是不同的比如对于8位位图每个字节代表了一个像素对于16位位图每两个字节代表了一个像素对于24位位图每三个字节代表了一个像素对于32位位图每四个字节代表了一个像素。
二、存储区域DC到位图文件 认识了位图文件的结构以后对特定位图文件进行操作就显得简单了。
我们通过创建特定的画笔刷子及位图对象在DC 环境下进行绘图后就要将保存在DC 里的图像存储到位图文件中以便使用及输出到其他媒体。
下面代码实现将设图上下文图形保存为位图文件。
BOOL CImg::SaveDCBmpHDC hDC HBITMAP hBitmap LPCTSTR lpFileName //当前分辨率下每象素所占字节数 int iBits //位图中每象素所占字节数 WORD wBitCount //定义调色板大小 位图中像素字节大小 位图文件大小 写入文件字节数 DWORD dwPaletteSize0 dwBmBitsSize0 dwDIBSize0 dwWritten0 //位图属性结构 BITMAP Bitmap //位图文件头结构 BITMAPFILEHEADER bmfHdr //位图信息头结构 BITMAPINFOHEADER bi //指向位图信息头结构 LPBITMAPINFOHEADER lpbi //定义文件分配内存句柄调色板句柄 HANDLE fh hDib hPalhOldPalNULL //计算位图文件每个像素所占字节数 iBits GetDeviceCapshDC BITSPIXEL GetDeviceCaps
上一篇:
【精品】最佳实践
下一篇:
酒店管理信息系统论文