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);