📄 rsimage.h
字号:
// RSImage.h: interface for the CRSImage class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_RSIMAGE_H__256839BB_91C8_4134_BAC3_F7C49F9095D5__INCLUDED_)
#define AFX_RSIMAGE_H__256839BB_91C8_4134_BAC3_F7C49F9095D5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
#define PALVERSION 0x300 // Windows version
#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 // 定义亮度分量
#define MicroW 320
#define MicroH 240
#define pi 3.1415926
#define TransColor RGB(255,255,255)
#include "RSImagedata.h"
#include "windowsx.h"
enum eImageType
{
IllegalImage, // 非法图像文件
BinaryImage , // 定义二值图像
FourBitsImage, // 定义4位彩色值图像
IndexColorImage, // 定义8位色彩图像
IndexGrayImage, // 定义8位灰度图像
HighColorImage, // 定义16位彩色图像
TrueColorImage, // 定义24位彩色图像
UltraColorImage // 定义32位彩色图像
};
class AFX_CLASS_EXPORT CRSImage
{
public:
CRSImage();
CRSImage(CRSImage &source);
virtual ~CRSImage();
virtual int Read(const char * filename){return 0;};
virtual int Write(const char * filename){return 0;};
virtual CRSImage& operator = (CRSImage& source);
public:
void ClientToDib(CPoint&,float);
void ClientToDib(CRect&,float);
void DibToClient(CPoint&,float);
void DibToClient(CRect&,float);
public:
HANDLE m_hDIB; // DDB内存数据句柄
HANDLE m_hPreDib;
CRgn *m_Rgn;
LPBYTE lpMicImg; // 微缩图象的指针
LPBITMAPINFO lpMicBMI; // 微缩图象的指针
int MicW,MicH;
CRect m_WorkRect,m_RgnRect;
eImageType filetype;
BYTE nMinRed,nMinGreen,nMinBlue,nMaxRed,nMaxGreen,nMaxBlue;
BYTE nMinTempRed,nMaxTempRed,nMinTempGreen,nMaxTempGreen,nMinTempBlue,nMaxTempBlue;
long nRedChannel[256],nGreenChannel[256],nBlueChannel[256];
long nRed[256],nGreen[256],nBlue[256],nTempSize,nFileSize;
float MeanRed,MeanGreen,MeanBlue;
float DevRed,DevGreen,DevBlue;
BOOL m_ReDraw,m_ReRect;
BOOL m_IsNormalBMP; // 图像是否上下颠倒
BOOL m_Is565RGBImage; // 是否是565格式的16位图像
char strTempPath[80];
char strTempName[80];
long m_HSIImageWidth; // 亮度分量图像的宽度
long m_HSIImageHeight; // 亮度分量图像的高度
BYTE *m_lpHSIArray; // 亮度分量图像数据的指针
protected:
WORD m_wNumRedBits; // R的位数 (方便处理16及32位图像)
WORD m_wNumGreenBits; // G的位数 (方便处理16及32位图像)
WORD m_wNumBlueBits; // B的位数 (方便处理16及32位图像)
DWORD m_dwRBitMask; // R的掩码 (方便处理16及32位图像)
DWORD m_dwGBitMask; // G的掩码 (方便处理16及32位图像)
DWORD m_dwBBitMask; // B的掩码 (方便处理16及32位图像)
UINT m_uBltUsage; // BLT的控制值
WORD m_wlowRedBit; // R的最低位 (方便处理16及32位图像)
WORD m_wlowGreenBit; // G的最低位 (方便处理16及32位图像)
WORD m_wlowBlueBit; // B的最低位 (方便处理16及32位图像)
RGBTRIPLE ColorIndex[256]; // 备份索引图像调色板
LPBYTE m_lpDibArrayBuff; // 备份图像数据的指针
BOOL flagback;
CPalette* m_pPalette;
CBitmap* m_pBitmap;
CDC * m_pMemDC;
CBitmap* m_pBitmapTmp;
CPalette* m_pPaletteTmp;
public:
CRSImage(HBITMAP hbm,int width,int height);
CRSImage(HDC pDC,CRSImagedata *img,int x,int y,int width,int height);
WORD NumColors() const;
BOOL MakePalette();
BOOL GetImgFromView(CDC* pDC,CRect DesRect,CPoint,float,BOOL IsFull=false);
void ComputePaletteSize(int nBitCount);
void ComputeMetrics();
BOOL CreateSection(const char* strPathname);
BOOL CreateTempMapFile(const char* strPathname);
void Empty();
int GetSizeImage() {return imdata->m_dwSizeImage;}
BOOL PasteAvailable();
CRSImagedata* GetDataPtr();
void SetDataPtr(CRSImage*);
BOOL IsValid() const { return (imdata->m_lpImage != NULL); }
CSize GetDimensions();
DWORD Height() const;
DWORD Width() const;
BOOL CheckPoint(long &x, long &y); // 检验点的有效性
BOOL CheckPoint(CPoint &pt); // 检验点的有效性
BOOL CheckRect(CPoint &p1,CPoint &p2); // 检验区域的有效性
BOOL CheckRect(CRect &ImageRect); // 检验区域的有效性
// 获得或设置图像灰度值的函数
BYTE GetGrayV( long x, long y); // 获得灰度图像的灰度值
BYTE GetGrayV( double x, double y); // 获得灰度图像的灰度值
BYTE GetXYHueValue(long x, long y); // 获得亮度图像的亮度值
RGBTRIPLE GetRGBPixel( long x, long y); // 获得彩色图像的RGB值
eImageType GetImageType();
void Inverse();
void HorizontalFlip();
void VerticalFlip();
void SetRGBPixel(long x, long y,RGBTRIPLE color); // 设置彩色图像的RGB值
void SetRGBPixel(long x, long y,DWORD color); // 设置彩色图像的RGB值
void SetGrayV( long x, long y,BYTE gray); // 设置灰度图像的灰度值
BOOL BakupColorIndex();
BOOL RestoreColorIndex();
WORD PaletteSize() const;
void SelectChannel(DWORD channel);
void BackUp();
void CreateHSIImage(DWORD dwType);
void ImgSwap();
void ReleaseBuffer();
BOOL NewHSIImg();
void ReleaseHueImg();
BOOL ConvertToGrayImage();
void GenerateRowAddress();
WORD GetColorMapNum(int Depth);
BOOL GetHistogram();
LPBYTE GetFileHeadPtr();
HANDLE GetCopyHandle(CPoint LTp, CPoint RBp);
BOOL CreateEmpty(long width, long height, int PixelDepth, DWORD colornum, BOOL IsNormal);
BOOL AdjustBrightness(int Percentage);
BOOL AdjustContrast(int Percentage);
BOOL AdjustRed(int Percentage);
BOOL AdjustGreen(int Percentage);
BOOL AdjustBlue(int Percentage);
BOOL AdjustSaturation(int Percentage);
BOOL AdjustImage(CPoint*,float*);
void RGBtoHSL(RGBTRIPLE rgb, double* H, double* S, double* L);
RGBTRIPLE HLStoRGB(const double& H, const double& L, const double& S);
double HuetoRGB(double m1, double m2, double h);
BOOL PasteFromClipboard();
BOOL SplitChannels(CRSImage& RedChannel, CRSImage& GreenChannel, CRSImage& BlueChannel);
BOOL CombineChannels(CRSImage&,CRSImage&,CRSImage&);
BOOL PasteToFile(CDC*,CRect);
//图象变换程序
BOOL LaplacianEdge();
BOOL FilterW3(char Matr1[3][3]=NULL,BYTE type=0);
BOOL FindEdgeW3(char Matr1[3][3]);
int ComputeMatrix(BYTE Matr1[3][3],char Matr2[3][3]);
BYTE SortOrder(BYTE Matr[3][3]);
BYTE ProEdge(BYTE Matr[3][3]);
BYTE Grads(BYTE Matr[3][3]);
BOOL TransForm(BYTE type);
BOOL HistogramEqu();
BOOL HistogramValor();
BOOL NormalDist(double,double);
BOOL CopyToClipboard();
BOOL CreateMicroImg();
CDC* BeginPaint(CDC *pDC);
void EndPaint();
void DIBSectionToDIB(int,int);
BOOL CreateLayer(CString,CSize,RGBTRIPLE);
BOOL MergeLayer(CDC *);
BOOL MergeBinLayer(CDC *pDC);
BOOL ChangeLayerColor(COLORREF);
BOOL ChangeImage(eImageType);
BOOL Draw(CDC* pDC,CRect DesRect,CPoint,float,BOOL IsFull=false);
BOOL DrawMemDC(CDC*,CRect DesRect,CPoint position,float m_fScale,BOOL IsFull=false);
BOOL DrawMemDCtoDC(CDC* pDC,CDC* memDC,CBitmap*,CRect DesRect,CPoint position,float m_fScale,BOOL IsFull=false);
public:
//快速傅立叶变换文件
void FFT(const char *);
void IFFT(const char *,const char *);
void FFTMag(const char *,const char *);
//
protected:
// void DetachMapFile();
BOOL Attach(HGLOBAL hGlobal);
void InitTrueColorInfo();
void InitGrayImageInfo(BOOL IsNormalBMP);
void ConstructInit();
BOOL NewDibPalInfo();
BOOL NewBuffer();
void ReleaseDibPalInfo();
CSize Size() const { return CSize(imdata->m_nWidth,imdata->m_nHeight); };
CRect Rect() const { return CRect(CPoint(0, 0), Size()); };
protected:
CRSImagedata* imdata;
};
#endif // !defined(AFX_RSIMAGE_H__256839BB_91C8_4134_BAC3_F7C49F9095D5__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -