This repository has been archived by the owner on Jan 5, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathDIB.h
153 lines (138 loc) · 4.85 KB
/
DIB.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
* This file is part of ImageSegmentor.
*
* Copyright (C) 2012 Jianzhu Huai <huai dot 3 at osu dot edu> (The Ohio State University)
*
* ImageSegmentor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ImageSegmentor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ImageSegmentor. If not, see <http://www.gnu.org/licenses/>.
*/
/*/////////////////////////////////////////////////////////////
这是一个 DIB位图操作类,用下面几个内部数据来保存 DIB位图信息:
BYTE *m_lpBits; ---------- 像素
BYTE *m_lpPalette; ------- 调色板;对于24位位图,此指针是NULL
int m_nWidth; ------------ 位图宽度
int m_nHeight; ----------- 位图高度
int m_nBitCount; --------- 每像素所用的位数
读入位图的函数有:
BOOL LoadFromFile(LPCTSTR filename);
------ 从 BMP文件中读入图像
BOOL ImportPcx(char *fn);
------ 从 PCX文件中读入图像;即对 pcx格式解码
对DIB 位图处理的函数有:
BOOL Grey(); //转换成灰度图像
BOOL HFlip(); //图像横向翻转
BOOL VFlip(); //图像纵向翻转
BOOL Rotate(); //顺时针旋转90度
BOOL Negative(); //转成负像
/*////////////////////////////////////////////////////////////*/
#ifndef __DIB_H
#define __DIB_H
//#include <windows.h>
#include <afx.h>
//#include <stdlib.h>
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
// 计算图像每行象素所占的字节数目
#define BYTE_PER_LINE(w, c) ((((w)*(c)+31)/32)*4)
// 根据表示颜色的位数来确定能表示的颜色数
// 如果是24位颜色,为0;如果是8位颜色,为256;如果是4位颜色,为16
#define PALETTESIZE(b) (((b)==8)?256:(((b)==4)?16:0))
class CDIB
{
// friend class CHC;
public:
BYTE *m_lpBits; // 图象数据指针
BYTE *bpBits;//back up image data
BYTE *m_lpPalette; // 调色板指针
int m_nBitCount; // 图像中表示每像素所用的位数
int m_nWidth; // 图象的宽度,单位是象素
int m_nHeight; // 图象的高度,单位是象素
int m_nColors;//number of colors in palette
int m_nPlanes; //
public:
void SetPixelColor2(int x,int y,BYTE color);
void SetPixelIndex(int x,int y,BYTE index);
BYTE GetNearestIndex(RGBQUAD color);
void SetPixelColor(int x,int y,RGBQUAD color);
bool CreateDIBFromBits(int nWidth,int nHeight,BYTE * buf,int=24);
RGBQUAD GetPaletteColor(BYTE idx);
BYTE GetPixelIndex(int x,int y);
BYTE GetPixelColor2(int x,int y);
RGBQUAD GetPixelColor(int x,int y);
int CreateDIBFromIPL(int, int ,char*,int bits);
int LoadDIBToIPL(char*imageData, int bits);
int LoadDIBToBuf(BYTE* buf);
int LoadDIBToBuf(float *buf);
bool SaveToFile(const CString&,CString&);
int lookregion(int label,int*tag, CRect rect,int area);
void ShowReg(int*tag=0,int step=32);
// 将Dib位图数据填充到到CDib类的数据结构
BOOL CreateDIB(int r, int g, int b,const CString&);
BOOL LoadDib(BYTE* lpDib);
// 将CDib类的数据结构中的数据转换为Dib位图格式数据
BOOL SaveToDib(BYTE *lpDib);
//void PlotRegions();
BOOL SaveEdge(LPCTSTR fn,BYTE*EM);
void LookRegions(int*tag,int option=0);
void Origin();
// void MapSegImage();
void MakeGrayPalette(int BitCount);
void histovector(float*hive);
BOOL InteEqualize();
CDIB(); // CDib类的构造函数
CDIB( const char *pszFileName);
~CDIB(); // CDib类的析构函数
// 清除CDib类中有关位图的数据
void Clear();
// 检测位图数据是否空(空图像)
// 获取图像宽度
int GetWidth() {return m_nWidth;}
// 获取图像高度
int GetHeight() {return m_nHeight;}
int GetLength() {return m_nHeight*m_nWidth;}
// 获取图像中表示每像素所用的位数
int GetBitCount() {return m_nBitCount;}
int GetWidthInBytes( int nBits, int nWidth );
// 根据位图数据画出位图
int Stretch(HDC,int,int,int,int,UINT,DWORD);
// 从位图文件中读取位图数据(根据打开的文件指针)
BOOL LoadFromFile(CFile *pf);
// 从位图文件中读取位图数据(根据文件名)
BOOL LoadFromFile(LPCTSTR filename);
// 将位图数据保存到位图文件(根据打开的文件指针)
BOOL SaveToFile(CFile *pf);
// 将位图数据保存到位图文件(根据文件名)
BOOL SaveToFile(LPCTSTR fn);
// 按照指定文件名读入PCX格式的图像文件的数据
// 将图像数据复制到剪贴板
BOOL Copy();
// 复制剪贴板中的数据
BOOL Paste();
// 将图像转换为灰度图像
BOOL Grey();
// 横向翻转图像
BOOL HFlip();
// 纵向翻转图像
BOOL VFlip();
// 将图像顺时针旋转90度
BOOL Rotate();
// 将图像转换为负像
BOOL Negative();
private:
CDIB(const CDIB&);
CDIB& operator=(const CDIB&);
};
int ImageProps(int&, CString&,const CString&fn);
//input:allocated EM
//output: EM initiated with data for edge detection
BYTE* GetEM(const CString&fn, BYTE *EM,int eB);
#endif //dib.h