📄 image.h
字号:
#ifndef _IMAGE_H
#define _IMAGE_H
#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B') // define "BM"
#define PALVERSION 0x300 // Windows version
#define WIDTHBYTES(bits) (((bits)+31) / 32*4) // 求图像表面跨距
#define COLORCOUNT 256 // 索引图像颜色数.
#define IMG_FORMAT_BASE_LENGTH 256 // *.IMG图像格式的长度基
#define MAXIMGSIZE 2048 // *.IMG图像格式最大长度
#define REDCOMPONENT 0x1 // 定义红色分量
#define GREENCOMPONENT 0x10 // 定义绿色分量
#define BLUECOMPONENT 0x100 // 定义蓝色分量
#define HUEIMAGE 0x1000 // 定义亮度分量
#define SATURATIONIMAGE 0x10000 // 定义亮度分量
#define INTENSITYIMAGE 0x100000 // 定义亮度分量
typedef unsigned char P_BYTE;
typedef long P_LONG;
class FloatImage
{
public:
float * lp_data;
float ** lp_AddRow;
unsigned int Width; // x indices range from 0 .. width-1
unsigned int Height; // y indices range from 0 .. height-1
unsigned int ImageSize;
public:
FloatImage();
~FloatImage();
FloatImage(unsigned int w, unsigned int h);
void Construct(unsigned int w, unsigned int h);
void DeleteData();
};
enum eImageType
{
IllegalImage, // 非法图像文件
BinaryImage , // 定义二值图像
FourBitsImage, // 定义4位彩色值图像
IndexColorImage, // 定义8位彩色图像
IndexGrayImage, // 定义8位灰度图像
HighColorImage, // 定义16位彩色图像
TrueColorImage, // 定义24位彩色图像
UltraColorImage // 定义32位彩色图像
};
class C2DArray : public CObject
{
public:
P_LONG m_nDibWidth; // 数据的宽度
P_LONG m_nDibHeight; // 数据的高度
P_BYTE *m_lpDibArray; // 数据的指针
P_BYTE **RowAddress;
public:
C2DArray();
C2DArray(P_LONG width, P_LONG height);
virtual ~C2DArray();
P_BYTE SGetXYValue(P_LONG x, P_LONG y); // 获得数据
P_BYTE SGetXYValue( CPoint pt ); // 获得数据
void SSetXYValue(P_LONG x, P_LONG y, P_BYTE value); // 设置数据
void SSetXYValue( CPoint pt, P_BYTE value); // 设置数据
P_LONG GetDataWidth() { return m_nDibWidth; }; // 获得数据的宽度
P_LONG GetDataHeight() { return m_nDibHeight; }; // 获得数据的高度
BOOL CheckDataRange(P_LONG x, P_LONG y); // 检验点的有效性
BOOL CheckDataRange( CPoint pt ); // 检验点的有效性
void ReleaseDibArray(); // 释放m_lpDibArray内存
};
class CImage : public C2DArray
{
public: //attribute
int m_SorceType;
int m_Bright;
int m_Contrast;
WORD m_wImageDepth; // 图像的像素深度 =1, 4, 8, 16, 24, 32
WORD m_wColorMapNum; // 调色板的数目 =2, 16, 256, 0, 0, 0
DWORD m_dwRBitMask; // R的掩码 (方便处理16及32位图像)
DWORD m_dwGBitMask; // G的掩码 (方便处理16及32位图像)
DWORD m_dwBBitMask; // B的掩码 (方便处理16及32位图像)
WORD m_wlowRedBit; // R的最低位 (方便处理16及32位图像)
WORD m_wlowGreenBit; // G的最低位 (方便处理16及32位图像)
WORD m_wlowBlueBit; // B的最低位 (方便处理16及32位图像)
WORD m_wNumRedBits; // R的位数 (方便处理16及32位图像)
WORD m_wNumGreenBits; // G的位数 (方便处理16及32位图像)
WORD m_wNumBlueBits; // B的位数 (方便处理16及32位图像)
BOOL m_IsExistRGBMask; // 是否存在RGB掩码
BOOL m_Is565RGBImage; // 是否是565格式的16位图像
P_LONG m_ImageSize; // 图像的大小
P_LONG m_ImageWidth; // 图像的宽度
P_LONG m_ImageHeight; // 图像的高度
P_LONG m_HSIImageWidth; // 亮度分量图像的宽度
P_LONG m_HSIImageHeight; // 亮度分量图像的高度
double m_fScale; // 图像的显示比例
BOOL m_bImgModified; // 图像是否被修改的标记
BOOL m_IsImageDownUp; // 图像是否上下颠倒
P_BYTE *m_lpDibArrayBuff; // 备份图像数据的指针
P_BYTE *m_lpHSIArray; // 亮度分量图像数据的指针
BITMAPFILEHEADER m_bmfHeader; // 位图的头
LPBITMAPINFO m_lpDibInfo; // 图像的信息
P_BYTE *m_pUseful; // 图像的信息内存
RGBTRIPLE ColorIndex[256]; // 备份索引图像调色板
public:
CImage(); // 类的构造及析构函数
CImage(CImage & source);
CImage(P_LONG width, P_LONG height, int PixelDepth,DWORD colornum);
CImage(CImage &source,CPoint <p, CPoint &RBp);
// 对产生的部分图像处理的函数
BOOL CreateEmpty(P_LONG width, P_LONG height,int PixelDepth,DWORD colornum);
BOOL CreatePartImg(CImage &source, CPoint <p, CPoint &RBp, int nScale=1);
BOOL CreateMicroImg(CImage &source, P_LONG MicroW, P_LONG MicroH);
virtual ~CImage(); // destructor : free memory of m_hDib and delete m_palDIB
//Read or save image from or to a file
virtual BOOL ReadImageFromFile(LPCTSTR lpszFileName);
virtual BOOL SaveImageToFile(LPCTSTR lpszFileName);
BOOL ReadImageAsBMP(CFile * pReadFile); //读取BMP图像
BOOL ReadImageAsIMG(CFile * pReadFile); //读取IMG图像
BOOL SaveImageAsBMP(CFile * pSaveFile); //保存IMG图像
BOOL SaveImageAsIMG(CFile * pSaveFile); //保存IMG图像
// 图像的显示函数
BOOL ShowCurrentImage(CDC *pMpDc,CRect ShowRect);
BOOL ShowCurrentImage(CDC *pMpDc,CPoint LTp, CPoint RBp);
BOOL ShowCurrentImage(CDC *pMpDc,int x1, int y1, int x2, int y2);
BOOL ShowPartialImage(CDC *pMpDc,CRect ShowRect,CPoint LTp,CPoint RBp, BOOL Is1to1=false);
// 获得图像信息的函数
eImageType GetImageType(); // 获得图像的类型
WORD GetColorMapNum(int Depth); // 调色板的数目
void SelectChannel(DWORD channel); // 选择颜色的显示分量
P_LONG GetImageWidth() // 获得图像的宽度
{ return m_ImageWidth; };
P_LONG GetImageHeight() // 获得图像的高度
{ return m_ImageHeight; };
WORD GetImageDepth() // 获得图像的深度
{ return m_wImageDepth; };
double GetShowScale() // 获得图像的显示比例
{ return m_fScale; };
void SetShowScale(double scale) // 设置图像的显示比例
{ m_fScale = scale; };
void GetImageDimensions(LPCTSTR fileName,
unsigned int &width,
unsigned int &height,
unsigned int &Depth);
// 获得或设置图像灰度值的函数
P_BYTE GetGrayV( P_LONG x, P_LONG y); // 获得灰度图像的灰度值
P_BYTE GetGrayV( double x, double y); // 获得灰度图像的灰度值
P_BYTE GetXYHueValue(P_LONG x, P_LONG y); // 获得亮度图像的亮度值
RGBTRIPLE GetRGBPixel( P_LONG x, P_LONG y); // 获得彩色图像的RGB值
void SetRGBPixel(P_LONG x, P_LONG y,RGBTRIPLE color); // 设置彩色图像的RGB值
void SetRGBPixel(P_LONG x, P_LONG y,DWORD color); // 设置彩色图像的RGB值
void SetGrayV( P_LONG x, P_LONG y,P_BYTE gray); // 设置灰度图像的灰度值
// 一些处理时有用的函数
void BackUp(); // bakup image data.
void ImgSwap(); // swap image with bakup image.
BOOL BakupColorIndex(); // bakup index image color table data.
void Inverse(); // 正负片的显示
void ImageInfo(); // 显示图像信息的函数
void VerticalFlip(); // 竖直翻转图像
void HorizontalFlip(); // 水平翻转图像
void Rotate90(BOOL Clockwise=TRUE); // 90.翻转图像
BOOL CheckPoint(P_LONG &x, P_LONG &y); // 检验点的有效性
BOOL CheckPoint(CPoint &pt); // 检验点的有效性
BOOL CheckRect(CPoint &p1,CPoint &p2); // 检验区域的有效性
BOOL CheckRect(CRect &ImageRect); // 检验区域的有效性
void CreateHSIImage(DWORD dwType); // transfer to HSI data
BOOL ConvertToGrayImage();
void GenerateRowAddress();
//用来向剪贴板提供数据句柄的函数,用后最好用ReleaseCopyHandle()释放内存
HANDLE m_hDIB; // handle of transfer image to clipboard
HANDLE GetCopyHandle(CPoint LTp, CPoint RBp);
void ReleaseCopyHandle(); // 释放m_hDIB内存
public: // 初始化及分配、释放部分、亮度、备份图像内存一些函数
BOOL NewHSIImg();
BOOL NewBuffer();
void AllocateMemory(BOOL IsExistRGBMask=FALSE);
void ReleaseHueImg();
void ReleaseBuffer();
void ReleaseDibPalInfo();
void InitTrueColorInfo();
void InitGrayImageInfo();
void DeleteMe();
private:
void ConstructInit();
};
HANDLE CopyHandle (HANDLE h);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -