⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsimage.h

📁 c语言实现的遥感图像处理的一些基本操作
💻 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 + -