【原创】分享一组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);

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

转载于:https://www.cnblogs.com/darkprince/archive/2011/05/12/2044890.html

你可能感兴趣的:(【原创】分享一组VC++底层图像处理函数)