You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
4.8 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD> ImageInsert.h
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include ".\pointnamerect.h"
#include ".\curveex.h"
#include "..\DrawImage\ImageBase.h"
#define IMAGE_CALIBRATE2 0x00000010 //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͼ<EFBFBD><CDBC>
#define IMAGE_CALIBRATE4 0x00000020 //<2F>ĵ<EFBFBD>У<EFBFBD><D0A3>ͼ<EFBFBD><CDBC>
#define IMAGE_CALIBRATE_H 0x00000040 //ˮƽֱ<C6BD><D6B1>У<EFBFBD><D0A3>ͼ<EFBFBD><CDBC>
#define IMAGE_CALIBRATE_V 0x00000080 //<2F><>ֱֱ<D6B1><D6B1>У<EFBFBD><D0A3>ͼ<EFBFBD><CDBC>
//ͼ<><CDBC><EFBFBD>е<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>һ<EFBFBD><D2BB>
#define IMAGE_TRANSPARENT_AND 0x00020000 //λͼ͸<CDBC><CDB8><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD>֤<EFBFBD>˶<EFBFBD><CBB6><EFBFBD>ǰͼ<C7B0><CDBC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define IMAGE_TRANSPARENT_ALPHA 0x00004000 //λͼ͸<CDBC><CDB8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>ͬ<EFBFBD><CDAC>ɫ<EFBFBD>IJ<EFBFBD>ͬ͸<CDAC><CDB8><EFBFBD>ȣ<EFBFBD>Ϊ<EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD>CMesh<73>е<EFBFBD><D0B5><EFBFBD>ͬ
#define IMAGE_TRANSPARENT_COLOR 0x00008000 //λͼ͸<CDBC><CDB8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ȫ͸<C8AB><CDB8>
#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ΪУ<CEAA><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уλ<D0A3><CEBB><EFBFBD>ĵ<EFBFBD>Уλ<D0A3><CEBB>ֱ<EFBFBD><D6B1>Уλ<D0A3><CEBB>;pValueΪ<65><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC>CCalibrate2<65><32>CCalibrate4<65><34>
virtual void Calibrate(int type, void* pValue);
virtual void ExchangeXY(void* pProjection); //ת<><D7AA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>,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); //<2F><><EFBFBD><EFBFBD>ͼƬ
BOOL CutIn(CCurveEx* pCurve,COLORREF bkColor=RGB(255,255,255)); //<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD>ɫ
CImageInsert* GetImage(int i_left, int j_top, int i_right, int j_bottom); //<2F>ӵ<EFBFBD>ǰͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ
BOOL Draw(CDC& hDestDC, CRect8& rectDest, CRect* clientRect);
void operator=(CImageInsert& ii);
BOOL LoadImage(CString strImageName);
BOOL SaveAs(LPCTSTR lpszImageName);
BOOL PastFromClipboard(void); //<2F>Ӽ<EFBFBD><D3BC>а<EFBFBD><D0B0><EFBFBD>ճ<EFBFBD><D5B3>ͼ<EFBFBD><CDBC>
BOOL CopyToClipboard(HWND hWnd=NULL);
int BackupImage(void);
void RestoreImage(void);
int ProcessImageColor(int nColorType);
int ProcessImage(CImageBase* pi, int nColorType);
int GrayColor(void); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>Ҷ<EFBFBD>ͼ<EFBFBD><CDBC>
int TowColor(int NoBegin, int NoEnd);
int PseudoColor(int nMode); //α<><CEB1>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>,1=ҽѧ<D2BD><D1A7>2,3=ң<><D2A3>
int RotateLeft90(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39><30>
int RotateRight90(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39><30>
bool IsBrightProcess(void); //<2F><><EFBFBD><EFBFBD>Gamma<6D><61>Light
bool Gamma(int gamma); //-100<30><30>+100,0Ϊ<30><CEAA><EFBFBD><EFBFBD>
bool Light(long brightness, long contrast=0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աȶ<D4B1>
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); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʽ
void SetCalibratedMode(DWORD nMode); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʽ
void SetFlags(DWORD dwFlags);
DWORD GetFlags(void);
BOOL IsTransparent(void); //<2F>Ƿ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ʾ
void SetTransparentMode(DWORD nMode); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
DWORD GetTransparentMode(void); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
void SetTransparentColor(COLORREF col);//<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ɫ
COLORREF GetTransparentColor(void);
bool SetAlpha(BYTE level); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>ȣ<EFBFBD>0-255<35><35>
void RemoveAlpha(void);
public:
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>˶Աȶ<D4B1><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>õ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
protected:
DWORD m_nFlags;//У<><D0A3>λͼ<CEBB><CDBC>ʽ,<2C>Ƿ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ʾ,....
COLORREF m_colTransparent; //͸<><CDB8>ɫ,ȱʡΪ<CAA1><CEAA>ɫ
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;
}