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.

125 lines
3.5 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//////////////////////////////////////////////////////////////////////////////
//文件 ImageBase.h
//主要功能:
//
//程序编写: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "CxImage\CxImage\ximage.h"
//图像序列化格式支持
#define IMAGE_SERIALIZE_BITAMP 1 //序列化为位图格式
#define IMAGE_SERIALIZE_JPEG 2
#define IMAGE_SERIALIZE_PNG 3
#define IMAGE_SERIALIZE_ICO 4
#define IMAGE_SERIALIZE_TIFF 5
#define IMAGE_SERIALIZE_GIF 6
namespace NImage
{
class AFX_EXT_CLASS CImageBase : public CxImage
{
public:
CImageBase(void);
virtual ~CImageBase();
BOOL Create(int nWidth, int nHeight, int nBPP, DWORD imagetype=CXIMAGE_FORMAT_BMP);
void Destroy(void);
HBITMAP Detach();
void Attach( HBITMAP hBitmap);
BOOL PastFromClipboard(void); //从剪切板上粘贴图像
BOOL CopyToClipboard(HWND hWnd=NULL);
BOOL Draw(CDC& hDestDC, CRect8& rectScreenDest, CRect* clientRect);
long Draw(HDC hDestDC, const RECT& rectDest, const RECT& rectSrc, DWORD dwRop = SRCCOPY); //显示图像,支持透明显示
long Draw(HDC hDestDC, int xDest, int yDest, int nDestWidth, int nDestHeight,
int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop = SRCCOPY);
void Erase(COLORREF pColor);
void operator = (const CImageBase& isrc);
HBITMAP MakeBitmap32(HDC hdc = NULL);
bool GetColorTable( RGBQUAD** pprgbColors );
void SetColorTable( RGBQUAD* prgbColors );
int GetMaxColorTableEntries(void);
BYTE* GetPixelAddress(long x, long y);
COLORREF GetPixel(long x, long y);
void SetPixel(long x, long y, COLORREF color);
int GetType(void);
int GetBpp(void);
int GetSerializeType(CString strFileExt);
BOOL LoadImage(LPCTSTR lpszImageName);
BOOL LoadImage(CFile& fr);
BOOL SaveAs(LPCTSTR lpszImageName, CRect8* pRect=NULL);
BOOL SaveAs(CFile& fw);
bool Serialize(CArchive& ar, const short &ver);
INT_PTR FileDialog( BOOL bOpenFileDialog, CString& fileName, CString strTitle=_T(""), DWORD lFlags=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT );
CString GetImageFilter(BOOL bOpenFileDialog);
//CImage
bool ReadBitmap(CArchive& ar, CImage* pImage);
bool WriteBitmap(CArchive& ar, CImage* pImage);
HBITMAP CreateBitmapIndirect(HBITMAP hScrBitmap);
HBITMAP CreateBitmapIndirect(LPBITMAPINFO lpBitmapInfo, const void* lpSrcBits);
bool Gamma(double gamma);//0.1至5
bool Light(long brightness, long contrast=0);
void MirrorX(void);
void MirrorY(void);
void TowColor(int NoBegin, int NoEnd);
long ReplaceColor(COLORREF oldColor, COLORREF newColor);
static int GetImageType(LPCTSTR lpszImageName);
static void* GetSupportImageType(int* pOutCount); //获得支持的所有图像类型
void DrawCurve(void* pCurve, void *pZoom, COLORREF col);//CCurve* pCurve, CGrid* pZoom
void LineTo(CPoint point, COLORREF col);
void MoveTo(CPoint point);
//以x0为轴//IsPositive=0画负轴=1画正轴=2两边都画
void DrawSolid(int x0, int x1, int x2, int y1, int y2, COLORREF col, int IsPositive);
/**
* 获取当前透明模式
* 透明模式通过位运算存储,可能同时存在多种状态
*
* \return 返回当前的透明模式值,表示不同的透明模式状态
*/
uint32_t GetTransparentMode();
/**
* 设置透明模式
*
* \param transparentMode 透明模式
*/
void SetTransparentMode(uint32_t transparentMode);
/**
* 清理透明模式
*
* \param transparentMode 透明模式
*/
void ClearTransparentMode(uint32_t transparentMode);
protected:
bool Lut(BYTE* pTable);
CPoint PointBegin; //for MoveTo, LineTo
public:
private:
uint32_t m_transparentMode = 0;
};
};
using namespace NImage;