|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件 ImageInsert.h
|
|
|
//主要功能:
|
|
|
//
|
|
|
//程序编写: 2005-12-07
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#pragma once
|
|
|
#include ".\pointnamerect.h"
|
|
|
#include ".\curveex.h"
|
|
|
#include "..\DrawImage\ImageBase.h"
|
|
|
|
|
|
#define IMAGE_CALIBRATE2 0x00000010 //两点校正图像
|
|
|
#define IMAGE_CALIBRATE4 0x00000020 //四点校正图像
|
|
|
#define IMAGE_CALIBRATE_H 0x00000040 //水平直线校正图像
|
|
|
#define IMAGE_CALIBRATE_V 0x00000080 //垂直直线校正图像
|
|
|
|
|
|
//图像中的透明度同时仅能支持一种
|
|
|
#define IMAGE_TRANSPARENT_AND 0x00020000 //位图透明与,下面两个显示方式很早就存在了,这里透明与虽然不与下面两种的数字连续了,但是至少保证了对以前图件的兼容
|
|
|
#define IMAGE_TRANSPARENT_ALPHA 0x00004000 //位图透明显示,可设置不同颜色的不同透明度,为了保持与CMesh中的相同
|
|
|
#define IMAGE_TRANSPARENT_COLOR 0x00008000 //位图透明显示,可指定一个颜色完全透明
|
|
|
#define IMAGE_TRANSPARENT_ALL (IMAGE_TRANSPARENT_AND | IMAGE_TRANSPARENT_ALPHA | IMAGE_TRANSPARENT_COLOR)
|
|
|
|
|
|
class AFX_EXT_CLASS CImageInsert : public CPointNameRect
|
|
|
{
|
|
|
public:
|
|
|
CImageInsert(void);
|
|
|
virtual ~CImageInsert(void);
|
|
|
|
|
|
public:
|
|
|
BOOL BeforeWrite();
|
|
|
void ClearImage(void);
|
|
|
int ReadBitmap(CFile& fr);
|
|
|
void Serialize(CArchive& ar, const short &ver) override;
|
|
|
virtual int Read(CFile& fr, const short& ver);
|
|
|
int ReadOld(CFile& fr, const short& ver);
|
|
|
virtual void Write(CFile& fw, const short& ver);
|
|
|
virtual void Clear(void);
|
|
|
// type为校正类型,比如两点校位、四点校位、直线校位等;pValue为类对象指针,如CCalibrate2、CCalibrate4等
|
|
|
virtual void Calibrate(int type, void* pValue);
|
|
|
virtual void ExchangeXY(void* pProjection); //转换到指定投影坐标,CPrljectio* pProjection
|
|
|
virtual void Rotate(double xs, double ys, double angle);
|
|
|
virtual void ScaleProperty(double sx, double sy);
|
|
|
|
|
|
void WriteElementDML(BYTE*& outBuffer, int& destLen);
|
|
|
|
|
|
virtual void WriteDML(CFile& fw, const short& ver, int nBaseTabNum);
|
|
|
virtual int ReadDML(CFile &fr, const short &ver);
|
|
|
|
|
|
virtual void WritePCG(CFile& fw, const short& ver, int nBaseTabNum);
|
|
|
virtual int ReadPCG(CFile &fr, const short &ver);
|
|
|
|
|
|
virtual int ReadPCG2(CFile &fr, const short &ver);
|
|
|
|
|
|
BOOL CutOut(CCurveEx* pCurve); //剪裁图片
|
|
|
BOOL CutIn(CCurveEx* pCurve,COLORREF bkColor=RGB(255,255,255)); //将指定区域内的像素清除为指定颜色
|
|
|
CImageInsert* GetImage(int i_left, int j_top, int i_right, int j_bottom); //从当前图片中切指定区域的图片
|
|
|
|
|
|
BOOL Draw(CDC& hDestDC, CRect8& rectDest, CRect* clientRect);
|
|
|
void operator=(CImageInsert& ii);
|
|
|
BOOL LoadImage(CString strImageName);
|
|
|
BOOL SaveAs(LPCTSTR lpszImageName);
|
|
|
|
|
|
BOOL PastFromClipboard(void); //从剪切板上粘贴图像
|
|
|
BOOL CopyToClipboard(HWND hWnd=NULL);
|
|
|
|
|
|
int BackupImage(void);
|
|
|
void RestoreImage(void);
|
|
|
|
|
|
int ProcessImageColor(int nColorType);
|
|
|
int ProcessImage(CImageBase* pi, int nColorType);
|
|
|
int GrayColor(void); //处理为灰度图像
|
|
|
int TowColor(int NoBegin, int NoEnd);
|
|
|
int PseudoColor(int nMode); //伪彩色处理,1=医学,2,3=遥感
|
|
|
int RotateLeft90(void); //向左旋转90度
|
|
|
int RotateRight90(void); //向右旋转90度
|
|
|
|
|
|
bool IsBrightProcess(void); //包括Gamma和Light
|
|
|
bool Gamma(int gamma); //-100至+100,0为不变
|
|
|
bool Light(long brightness, long contrast=0); //亮度与对比度
|
|
|
|
|
|
CImageBase* GetImage(void);
|
|
|
void SetImage(CImageBase* pImage);
|
|
|
|
|
|
CPoint RealToImagePoint(double x, double y);
|
|
|
CPoint2D RealToImagePoint2D(double x, double y);
|
|
|
CPoint2D ImagePointToReal(int x, int y);
|
|
|
void RealToImagePoint(CPoint& pt, double x, double y);
|
|
|
void RealToImagePoint2D(CPoint2D& pt, double x, double y);
|
|
|
void ImagePointToReal(CPoint2D& pt, int x, int y);
|
|
|
|
|
|
DWORD GetCalibratedMode(void); //获得校正图像方式
|
|
|
void SetCalibratedMode(DWORD nMode); //设置校正图像方式
|
|
|
|
|
|
void SetFlags(DWORD dwFlags);
|
|
|
DWORD GetFlags(void);
|
|
|
|
|
|
BOOL IsTransparent(void); //是否透明显示
|
|
|
void SetTransparentMode(DWORD nMode); //设置透明模式
|
|
|
DWORD GetTransparentMode(void); //获得透明模式
|
|
|
void SetTransparentColor(COLORREF col);//设置透明色
|
|
|
COLORREF GetTransparentColor(void);
|
|
|
|
|
|
bool SetAlpha(BYTE level); //设置透明度(0-255)
|
|
|
void RemoveAlpha(void);
|
|
|
|
|
|
public:
|
|
|
//仅是为了对比度与亮度
|
|
|
long m_brightness;
|
|
|
long m_contrast;
|
|
|
|
|
|
CImageBase* m_pImage;
|
|
|
|
|
|
dfPoint Original4P[4], Real4P[4];
|
|
|
CRect8 Original2P;
|
|
|
CRect8 Real2P;
|
|
|
BOOL bSaveCalibrateBitmap;
|
|
|
BOOL bSaveFlag,bCancelRead;
|
|
|
|
|
|
protected:
|
|
|
int CalibrateOther(int type, void* pValue);
|
|
|
void CalibrateLine(int type, void* pValue);
|
|
|
BOOL LoadImageAuto(LPCTSTR strImageName); //读函数中调用的图像加载函数
|
|
|
|
|
|
protected:
|
|
|
DWORD m_nFlags;//校正位图方式,是否透明显示,....
|
|
|
COLORREF m_colTransparent; //透明色,缺省为白色
|
|
|
|
|
|
private:
|
|
|
CWinThread* m_pProcessImageThread;
|
|
|
int m_pImageBakType;
|
|
|
CImageBase* m_pBakImage;
|
|
|
|
|
|
public:
|
|
|
virtual int ReadPCG(void *pxp, const short &ver);
|
|
|
virtual int ReadPCG2(void *pxp, const short &ver);
|
|
|
};
|
|
|
|
|
|
AFX_INLINE CImageBase* CImageInsert::GetImage(void)
|
|
|
{
|
|
|
return m_pImage;
|
|
|
}
|
|
|
|