hDC PLANES if iBits lt 1 wBitCount 1 else if iBits lt 4 wBitCount 4 else if iBits lt 8 wBitCount 8 else wBitCount 24 //wBitCount 4 GetObjecthBitmap sizeofBitmap LPSTRampBitmap bi.biSize sizeofBITMAPINFOHEADER bi.biWidth Bitmap.bmWidth bi.biHeight Bitmap.bmHeight bi.biPlanes 1 bi.biBitCount wBitCount bi.biCompression BI_RGB bi.biSizeImage 0 bi.biXPelsPerMeter 0 bi.biYPelsPerMeter 0 bi.biClrImportant 0 bi.biClrUsed 0 dwBmBitsSize Bitmap.bmWidth wBitCount 31 / 32 4 Bitmap.bmHeight //为位图内容分配内存 hDib GlobalAllocGHNDdwBmBitsSize dwPaletteSize sizeofBITMAPINFOHEADER lpbi LPBITMAPINFOHEADERGlobalLockhDib lpbi bi // 处理调色板 hPal GetStockObjectDEFAULT_PALETTE if hPal hOldPal ::SelectPalettehDC HPALETTEhPal FALSE // 获取该调色板下新的像素值 GetDIBitshDC hBitmap 0 UINT Bitmap.bmHeight LPSTRlpbi sizeofBITMAPINFOHEADER dwPaletteSize BITMAPINFO lpbi DIB_RGB_COLORS //恢复调色板 if hOldPal ::SelectPalettehDC HPALETTEhOldPal TRUE RealizePalettehDC //创建位图文件 fh CreateFilelpFileName GENERIC_WRITE0 NULL CREATE_ALWAYS FILE_ATTRIBUTE_NORMAL FILE_FLAG_SEQUENTIAL_SCAN NULL if fh INVALID_HANDLE_VALUE return FALSE // 设置位图文件头 bmfHdr.bfType 0x4D42 // quotBMquot dwDIBSize sizeofBITMAPFILEHEADER sizeofBITMAPINFOHEADER dwPaletteSize dwBmBitsSize bmfHdr.bfSize dwDIBSize bmfHdr.bfReserved1 0 bmfHdr.bfReserved2 0 bmfHdr.bfOffBits DWORDsizeofBITMAPFILEHEADER DWORDsizeofBITMAPINFOHEADER dwPaletteSize // 写入位图文件头 WriteFilefh LPSTRampbmfHdr sizeofBITMAPFILEHEADER ampdwWritten NULL // 写入位图文件其余内容 WriteFilefh LPSTRlpbi dwDIBSize ampdwWritten NULL //清除 GlobalUnlockhDib GlobalFreehDib CloseHandlefh return TRUE 保存位图文件前通过GetObject函数取得位图长度 通过GetDIBits取得位图图像扫描数据填充BITMAPFILEHEADER位图文件头结构 BITMAPINFOHEADER 位图信息头结构 然后 写入位图文件头 WriteFilefh LPSTRampbmfHdr sizeofBITMAPFILEHEADER ampdwWritten NULL 写入位图文件其余内容 WriteFilefh LPSTRlpbi dwDIBSize ampdwWritten NULL 以 文件头 位图信息 位图像素数据 的顺序进行存储。
三 COM组件接口设计 前面我们在输入文本后在程序中创建设备上下文对输入的文本进行计算并输出了指定文件名的位图文件在本设计中我们使用了以JPEG压缩格式存储文件的方式以减小网络传输时间因jpeg压缩方法的论述已超出本文范围故在此不再赘述。
为了让其他语言调用此接口我们以 COM 组件的方式发布此程序可供VBDELPHIPBASP等程序调用下面给出COM组件的设计方法一般COM组件的创建及编译超出本文范围故不再作解释。
在组件中清加方法 STDMETHODOutTextImg/out retval/ long pValltvalue500 long lWeight inoptionaldefaultvalue0 long l3D 和 STDMETHODOutImgBSTR bstrFileName long lDelFile 分别实现处理文件本保存为图像及把图像输出到用户浏览器。
实现代码如下 STDMETHODIMP CAspImage::OutImgFromTextBSTR bstrFilePath BSTR bstrText BSTR bstrBgImg long lCSet BSTR bstrFont long lWidth long lHeight long lLeft long lTop long llfHeight long lWeight long l3D CImg img try if0 img.OutImgFromText bstrFilePath bstrText bstrBgImg lCSet bstrFont lWidth lHeight lLeft lTop llfHeight lWeight l3D return S_OK else return S_FALSE catch... return S_FALSE return S_OK // 一些处理代码我们封装在了Cimg类中在前面做过介绍在这里只是简单调用即可。
STDMETHODIMP CAspImage::OutTextImglong pVal HRESULT hr OutImgFromTextbstrFilePath bstrText bstrBgImg lCSet bstrFont lWidth lHeight lLeft lTop llfHeight lWeight l3D ifSUCCEEDEDhr pVal 0 else pVal -1 return S_OK OutTextImg 函数只简单.
上一篇:
【精品】最佳实践
下一篇:
酒店管理信息系统论文