【原创】分享一组VC++底层图像处理函数

刚刚整理了以前的一些代码,因为时间有限,暂时将一组处理DIB Section(HBITMAP句柄)的函数集源码共享。

本代码为2001年首次编写,其中部分代码为从网络收集。这些处理函数在多年的VC图形项目中一直使用,安全,高效。

作用:  该DLL完成了关于BMP图象的转化,存储,透明等多方面操作。
   该函数集合主要围绕DIB Section句柄(HBTIMAP)在WINDOWS系统中绘制,透明,旋转,输出等功能而建立。
   方便用户对于底层BITMAP图形最直接得控制,从而提高程序运行效率。
   可用于例如追求显示效率的WINDOW窗口图形控制等项目。

代码集形式为.DLL模式,即标准的WINDOWS动态链接库。采用VC6平台开发并编译通过。

相关功能函数如下:

1 // .DLL APPLICATION
2  // ManagerBmp.h
3  ////////////////////////////////////////////////////////////////////////////////////
4  // 名称: managerBmp(DLL)头文件
5  // 作者: DarkPrince
6  // 作用: 该DLL完成了关于BMP图象的转化,存储,透明等多方面操作
7 // 该函数集合主要围绕DIB Section句柄(HBTIMAP)在WINDOWS系统中绘制,
8 // 透明,旋转,输出等功能而建立。
9 // 方便用户对于底层BITMAP图形最直接得控制,从而提高程序运行效率。
10 // 可用于例如追求显示效率的WINDOW窗口图形控制等项目。
11 //
12 // 备注: 该DLL中函数部分代码为网络中寻找,部分为自己编写
13 // 对于网络中引用的部分代码由于已经无法确认出处,所以请相关作者基于理解
14 // 首次开发: 2001.7.20
15 ////////////////////////////////////////////////////////////////////////////////////
16 #ifdef MANAGERBMP_EXPORTS
17 #define MANAGERBMP_API __declspec(dllexport)
18 #else
19 #define MANAGERBMP_API __declspec(dllimport)
20 #endif
21 //调用方式
22 enum
23 {
24 LOADBMP_FROM_SYS,//调用系统函数
25 LOADBMP_FROM_FILE//调用自定义函数,FROM FILE
26 };
27
28 //透明方式
29 enum
30 {
31 AUXIMG_TRANSTYPE_SRC,//透明源图中透明色
32 AUXIMG_TRANSTYPE_DST//透明目的图中透明色
33 };
34
35 //in: 图片路径,BMP句柄,PAL句柄,调用方式
36 //out: TRUE/FALSE
37 //功能: 按照指定路径取得DIBSECTION和调色板
38 //注意: 这里我们会取得取得HBITMAP句柄,这里是DIBSECTION而非DIB OR DDB
39 // 调用该函数后要用DELETEOBJECT()释放HBITMAP,HPALETTE对象
40 MANAGERBMP_API BOOL LoadDIBSectAndPalette(LPCSTR szBmpPath, HBITMAP& hBmp,
41 HPALETTE* pPal=NULL, BYTE byType=LOADBMP_FROM_SYS);
42
43 //in: 图片路径,BMP句柄
44 //out: TRUE/FALSE
45 //功能: 按照指定路径取得DIBSECTION,FROM SYS FUNC
46 //注意: 这里我们会取得取得HBITMAP句柄,这里是DIBSECTION而非DIB OR DDB
47 // 调用该函数后要用DELETEOBJECT()释放HBITMAP
48 MANAGERBMP_API BOOL LoadDIBSectBySys(LPCSTR szBmpPath,HBITMAP& hBmp);
49
50 //in: 图片路径,BMP句柄
51 //out: TRUE/FALSE
52 //功能: 按照指定路径取得DIBSECTION,FROM SELF FUNC
53 //注意: 这里我们会取得取得HBITMAP句柄,这里是DIBSECTION而非DIB OR DDB
54 // 调用该函数后要用DELETEOBJECT()释放HBITMAP
55 MANAGERBMP_API BOOL LoadDIBSectByFile(LPCSTR szBmpPath,HBITMAP& hBmp);
56
57 //in: 目标图片句柄,目标图起始点X,Y,目标图宽度,高度,源图句柄,源图起始点X,Y,透明度
58 //out: TRUE/FALSE
59 //功能: 对两张24位真彩色进行ALPHA透明,The ALPHA param must IN range of 0-----255
60 //注意: 这里的两个图象句柄只针对24位DIBSECTION
61 // 如果ALPHA参数为255那么为COPY图象到定点
62 MANAGERBMP_API BOOL AlphaBltDIBSect24(HBITMAP hBmpDst,int dx,int dy, int boxW,int boxH,
63 HBITMAP hBmpSrc,int sx,int sy,BYTE alpha);
64
65 //in: 目标图片句柄,目标图起始点X,Y,目标图宽度,高度,源图句柄,源图起始点X,Y,透明色,透明方式
66 //out: TRUE/FALSE
67 //功能: 对两张24位真彩色指定颜色透明
68 //注意: 这里的两个图象句柄只针对24位DIBSECTION,其他DDB,DIB格式都不支持
69 // 透明方式为点透明
70 MANAGERBMP_API BOOL TransBltDIBSect24(HBITMAP hBmpDst,int dx,int dy, int boxW,int boxH,
71 HBITMAP hBmpSrc,int sx,int sy,COLORREF clrTrans,
72 int nTransType=AUXIMG_TRANSTYPE_SRC);
73
74 //in: 目标图象句柄(DIBSECTION),源图片句柄
75 //out: TRUE/FALSE
76 //注意: 两张图片一定要大小相等并且颜色深度相同
77 //功能: 复制DIB SECT到另一个DIB SECT句柄中
78 MANAGERBMP_API BOOL CopyDIBSectBlt(HBITMAP hBmpDst,HBITMAP hBmpSrc);
79
80 //in: 源图片DDB句柄,PAL句柄(如果为NULL,那么调用系统默认的PAL),压缩参数
81 //out: 返回DIB HANDLE
82 //功能: 将DDB转换成DIB SECT
83 //注意: 返回后的HANDLE需要使用GLOBALFREE()函数释放掉
84 MANAGERBMP_API HANDLE DIBSectToDIBWithPalette(HBITMAP hBitmap, HPALETTE hPal=NULL,
85 DWORD dwCompression=BI_RGB);
86
87 //in: DIB HANDLE
88 //out: DDB HBITMAP
89 //功能: 将DIB SECT转化成DDB
90 //注意: 返回后的HBITMAP需要使用DELETEOBJECT()函数释放
91 MANAGERBMP_API HBITMAP DIBToDIBSect(HANDLE hdib);
92
93 //in: DIBSECTION HBTIMAP
94 //out: DIB HANDLE
95 //功能: 将DIBSECTION 转化成DIB HANDLE
96 //注意: 这里返回的DIB HANDLE需要使用GLOBFREEF()函数释放
97 MANAGERBMP_API HANDLE DIBSectToDIB(HBITMAP hBitmap);
98
99 //in: 路径,DDB HBITMAP,HPAL,压缩比率
100 //out: TRUE/FALSE
101 //功能: 将DDB图象存储成BMP图片
102 MANAGERBMP_API BOOL SaveDIBSectToFileWithPalette(LPCSTR szBmpPath,HBITMAP& hBmp,
103 HPALETTE hPal=NULL,DWORD dwCompression=BI_RGB);
104
105 //in: 路径,DIB HANDLE
106 //out: TRUE/FALSE
107 //功能: 将DIB图象存储成BMP图片
108 MANAGERBMP_API BOOL SaveDIBToFile(LPCSTR szBmpPath,HANDLE hDib);
109
110 //in: 路径,DIBSECTION HBITMAP
111 //out: TRUE/FALSE
112 //功能: 将DIBsection图象存储成BMP图片
113 MANAGERBMP_API BOOL SaveDIBSectToFile(LPCSTR szBmpPath,HBITMAP hBmp);
114
115 //in: 图象句柄(DDB,DIBSECTION),图象SIZE结构
116 //out: TRUE/FALSE
117 //功能: 取得一个指定图象(DDB OR DIBSECTION)的大小
118 MANAGERBMP_API BOOL GetBmpSize(HBITMAP hBmp,SIZE& sizeBmp);
119
120 //in: 图象句柄(DDB,DIBSECTION),透明色开始位置,透明色结束位置
121 //out: TRUE/FALSE
122 //功能: 根据BMP图象创建一个异型区域
123 MANAGERBMP_API HRGN BmpToRgn(HBITMAP hbmp, COLORREF cTransparentColor=0,
124 COLORREF cTolerance=0);
125
126 //in: 目的DC,目的开始点X,Y,需要目的的宽度,高度,源DC,源开始点X,Y,透明色
127 //out: TRUE/FALSE
128 //功能: 将两个DC中BMP进行指定透明色的透明
129 //注意: hSrcDC必须是已经将源图象选入的DC,该透明方式为MASK TRANS
130 MANAGERBMP_API BOOL TransBltBmp(HDC hDstDC,int dx,int dy,int boxW,int boxH,
131 HDC hSrcDC,int sx,int sy,COLORREF clrTrans);
132
133 //in: 目的DC,目的开始点X,Y,需要目的的宽度,高度,源图象(DDB OR DIBSECTION),
134 // 源开始点X,Y,透明色
135 //out: TRUE/FALSE
136 //功能: 将图象句柄透明到目的DC中,指定颜色透明
137 //注意: hSrcDC必须是已经将源图象选入的DC, 该透明方式为MASK TRANS
138 MANAGERBMP_API BOOL TransBltBmp(HDC hDstDC,int dx,int dy,int boxW,int boxH,
139 HBITMAP hSrcBmp,int sx,int sy,COLORREF clrTrans);
140
141 //in: 目的图象(DDB OR DIBSECTION),目的开始点X,Y,需要目的的宽度,高度,
142 // 源图象(DDB OR DIBSECTION),源开始点X,Y,透明色
143 //out: TRUE/FALSE
144 //功能: 将图象句柄透明到目的DC中,指定颜色透明
145 //注意: 两张图片不能是DIB的,该透明方式为MASK TRANS
146 MANAGERBMP_API BOOL TransBltBmp(HBITMAP hDstBmp,int dx,int dy,int boxW,int boxH,
147 HBITMAP hSrcBmp,int sx,int sy,COLORREF clrTrans);
148
149 //in: 源图像句柄,旋转角度,旋转后空白区域颜色
150 //out: 旋转后新图像句柄
151 //功能: 旋转原图到指定角度,返回旋转后新图,旋转后空白区域用指定颜色填充
152 MANAGERBMP_API HBITMAP GetRotatedBitmap(HBITMAP hBitmap,float radians, COLORREF clrBack);
153
154 //in: 图片宽度,图片高度
155 //out: 创建新图
156 //功能: 创建指定宽度,高度BMP图片
157 MANAGERBMP_API HBITMAP CreateBlankBmp(int biWidth,int biHeight);

该动态库源代码及简单调用示例 [下载]

posted @ 2011-05-12 22:46  darkprince  阅读(1183)  评论(1编辑  收藏  举报
作者自述: 本人从事十六年WINDOWS应用/游戏/设备/WEB开发,目前从事Linux,Docker及CAAS云平台架构设计及开发。 基于全球开源共享理念,本人会分享更多原创及译文,让更多的IT人从中受益,与大家一起进步! 基因Cloud 原创,转发请注明出处 1738387@qq.com (工作繁忙,有事发邮件,QQ不加,非要事勿扰,多谢!)