📄 ximage.h
字号:
/* * File: ximage.h * Purpose: General Purpose Image Class *//* -------------------------------------------------------------------------------- COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: CxImage version 5.99c 17/Oct/2004 CxImage : Copyright (C) 2001 - 2004, Davide Pizzolato Original CImage and CImageIterator implementation are: Copyright (C) 1995, Alejandro Aguilar Sierra (asierra(at)servidor(dot)unam(dot)mx) Covered code is provided under this license on an "as is" basis, without warranty of any kind, either expressed or implied, including, without limitation, warranties that the covered code is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the covered code is with you. Should any covered code prove defective in any respect, you (not the initial developer or any other contributor) assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty constitutes an essential part of this license. No use of any covered code is authorized hereunder except under this disclaimer. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, including commercial applications, freely and without fee, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. -------------------------------------------------------------------------------- Other information: about CxImage, and the latest version, can be found at the CxImage home page: http://www.xdp.it -------------------------------------------------------------------------------- */#if !defined(__CXIMAGE_H)#define __CXIMAGE_H#if _MSC_VER > 1000#pragma once#endif /////////////////////////////////////////////////////////////////////////////#include "xfile.h"#include "xiofile.h"#include "xmemfile.h"#include "ximadef.h" //<vho> adjust some #define/* see "ximacfg.h" for CxImage configuration options *//////////////////////////////////////////////////////////////////////////////// CxImage formats enumeratorenum ENUM_CXIMAGE_FORMATS{CXIMAGE_FORMAT_UNKNOWN,#if CXIMAGE_SUPPORT_BMPCXIMAGE_FORMAT_BMP,#endif#if CXIMAGE_SUPPORT_GIFCXIMAGE_FORMAT_GIF,#endif#if CXIMAGE_SUPPORT_JPGCXIMAGE_FORMAT_JPG,#endif#if CXIMAGE_SUPPORT_PNGCXIMAGE_FORMAT_PNG,#endif#if CXIMAGE_SUPPORT_MNGCXIMAGE_FORMAT_MNG,#endif#if CXIMAGE_SUPPORT_ICOCXIMAGE_FORMAT_ICO,#endif#if CXIMAGE_SUPPORT_TIFCXIMAGE_FORMAT_TIF,#endif#if CXIMAGE_SUPPORT_TGACXIMAGE_FORMAT_TGA,#endif#if CXIMAGE_SUPPORT_PCXCXIMAGE_FORMAT_PCX,#endif#if CXIMAGE_SUPPORT_WBMPCXIMAGE_FORMAT_WBMP,#endif#if CXIMAGE_SUPPORT_WMFCXIMAGE_FORMAT_WMF,#endif#if CXIMAGE_SUPPORT_J2KCXIMAGE_FORMAT_J2K,#endif#if CXIMAGE_SUPPORT_JBGCXIMAGE_FORMAT_JBG,#endif#if CXIMAGE_SUPPORT_JP2CXIMAGE_FORMAT_JP2,#endif#if CXIMAGE_SUPPORT_JPCCXIMAGE_FORMAT_JPC,#endif#if CXIMAGE_SUPPORT_PGXCXIMAGE_FORMAT_PGX,#endif#if CXIMAGE_SUPPORT_PNMCXIMAGE_FORMAT_PNM,#endif#if CXIMAGE_SUPPORT_RASCXIMAGE_FORMAT_RAS,#endifCMAX_IMAGE_FORMATS};struct basic_image_information { ENUM_CXIMAGE_FORMATS format; long width,height;};void inline create_basic_image_information(ENUM_CXIMAGE_FORMATS format, long width, long height,basic_image_information *basic_info){ basic_info->format=format; basic_info->width=width; basic_info->height=height;}/////////////////////////////////////////////////////////////////////////////// CxImage class/////////////////////////////////////////////////////////////////////////////class DLL_EXP CxImage{//extensible information collectortypedef struct tagCxImageInfo { DWORD dwEffWidth; ///< DWORD aligned scan line width BYTE* pImage; ///< THE IMAGE BITS CxImage* pGhost; ///< if this is a ghost, pGhost points to the body CxImage* pParent; ///< if this is a layer, pParent points to the body DWORD dwType; ///< original image format char szLastError[256]; ///< debugging long nProgress; ///< monitor long nEscape; ///< escape long nBkgndIndex; ///< used for GIF, PNG, MNG RGBQUAD nBkgndColor; ///< used for RGB transparency int m_dispmeth; ///< used for GIF BYTE nQuality; ///< used for JPEG BYTE nJpegScale; ///< used for JPEG [ignacio] long nFrame; ///< used for TIF, GIF, MNG : actual frame long nNumFrames; ///< used for TIF, GIF, MNG : total number of frames DWORD dwFrameDelay; ///< used for GIF, MNG long xDPI; ///< horizontal resolution long yDPI; ///< vertical resolution RECT rSelectionBox; ///< bounding rectangle BYTE nAlphaMax; ///< max opacity (fade) bool bAlphaPaletteEnabled; ///< true if alpha values in the palette are enabled. bool bEnabled; ///< enables the painting functions long xOffset; long yOffset; DWORD dwCodecOpt[CMAX_IMAGE_FORMATS]; ///< for GIF, TIF : 0=def.1=unc,2=fax3,3=fax4,4=pack,5=jpg RGBQUAD last_c; ///< for GetNearestIndex optimization BYTE last_c_index; bool last_c_isvalid; long nNumLayers; DWORD dwFlags; ///< 0x??00000 = reserved, 0x00??0000 = blend mode, 0x0000???? = layer id - user flags bool bGetAllFrames; CxImage ** GifFrames;} CXIMAGEINFO;public: //public structuresstruct rgb_color { BYTE r,g,b; };#if CXIMAGE_SUPPORT_WINDOWS// <VATI> text placement data// members must be initialized with the InitTextInfo(&this) function.typedef struct tagCxTextInfo{ TCHAR text[4096]; ///< text (char -> TCHAR for UNICODE [Cesar M]) LOGFONT lfont; ///< font and codepage data COLORREF fcolor; ///< foreground color long align; ///< DT_CENTER, DT_RIGHT, DT_LEFT aligment for multiline text BYTE opaque; ///< text has background or hasn't. Default is true. ///< data for background (ignored if .opaque==FALSE) COLORREF bcolor; ///< background color float b_opacity; ///< opacity value for background between 0.0-1.0 Default is 0. (opaque) BYTE b_outline; ///< outline width for background (zero: no outline) BYTE b_round; ///< rounding radius for background rectangle. % of the height, between 0-50. Default is 10. ///< (backgr. always has a frame: width = 3 pixel + 10% of height by default.)} CXTEXTINFO;#endifpublic:/** \addtogroup Constructors */ //@{ CxImage(DWORD imagetype = 0); CxImage(DWORD dwWidth, DWORD dwHeight, DWORD wBpp, DWORD imagetype = 0); CxImage(const CxImage &src, bool copypixels = true, bool copyselection = true, bool copyalpha = true); CxImage(const TCHAR * filename, DWORD imagetype); // For UNICODE support: char -> TCHAR CxImage(FILE * stream, DWORD imagetype); CxImage(CxFile * stream, DWORD imagetype); CxImage(BYTE * buffer, DWORD size, DWORD imagetype); virtual ~CxImage() { Destroy(); DestroyGifFrames();}; CxImage& operator = (const CxImage&);//@}/** \addtogroup Initialization */ //@{ void* Create(DWORD dwWidth, DWORD dwHeight, DWORD wBpp, DWORD imagetype = 0); bool Destroy(); bool DestroyGifFrames(); void Clear(BYTE bval=0); void Copy(const CxImage &src, bool copypixels = true, bool copyselection = true, bool copyalpha = true); bool Transfer(CxImage &from); bool CreateFromArray(BYTE* pArray,DWORD dwWidth,DWORD dwHeight,DWORD dwBitsperpixel, DWORD dwBytesperline, bool bFlipImage); bool CreateFromMatrix(BYTE** ppMatrix,DWORD dwWidth,DWORD dwHeight,DWORD dwBitsperpixel, DWORD dwBytesperline, bool bFlipImage); void FreeMemory(void* memblock);//@}/** \addtogroup Attributes */ //@{ long GetSize(); BYTE* GetBits(DWORD row = 0); BYTE GetColorType(); void* GetDIB() const; DWORD GetHeight() const; DWORD GetWidth() const; DWORD GetEffWidth() const; DWORD GetNumColors() const; WORD GetBpp() const; DWORD GetType() const; const char* GetLastError(); const TCHAR* GetVersion(); const float GetVersionNumber(); DWORD GetFrameDelay() const; void SetFrameDelay(DWORD d); void GetOffset(long *x,long *y); void SetOffset(long x,long y); BYTE GetJpegQuality() const; void SetJpegQuality(BYTE q); BYTE GetJpegScale() const; void SetJpegScale(BYTE q); long GetXDPI() const; long GetYDPI() const; void SetXDPI(long dpi); void SetYDPI(long dpi); DWORD GetClrImportant() const; void SetClrImportant(DWORD ncolors = 0); long GetProgress() const; long GetEscape() const; void SetProgress(long p); void SetEscape(long i); long GetTransIndex() const; RGBQUAD GetTransColor(); void SetTransIndex(long idx); void SetTransColor(RGBQUAD rgb); bool IsTransparent() const; void SetDisposalMethod(int dm); long GetDisposalMethod(); DWORD GetCodecOption(DWORD imagetype = 0); bool SetCodecOption(DWORD opt, DWORD imagetype = 0); DWORD GetFlags() const; void SetFlags(DWORD flags, bool bLockReservedFlags = true); //void* GetUserData() const {return info.pUserData;} //void SetUserData(void* pUserData) {info.pUserData = pUserData;}//@}/** \addtogroup Palette * These functions have no effects on RGB images and in this case the returned value is always 0. * @{ */ bool IsGrayScale(); bool IsIndexed() const; bool IsSamePalette(CxImage &img, bool bCheckAlpha = true); DWORD GetPaletteSize(); RGBQUAD* GetPalette() const; RGBQUAD GetPaletteColor(BYTE idx); bool GetPaletteColor(BYTE i, BYTE* r, BYTE* g, BYTE* b); BYTE GetNearestIndex(RGBQUAD c); void BlendPalette(COLORREF cr,long perc); void SetGrayPalette(); void SetPalette(DWORD n, BYTE *r, BYTE *g, BYTE *b); void SetPalette(RGBQUAD* pPal,DWORD nColors=256); void SetPalette(rgb_color *rgb,DWORD nColors=256); void SetPaletteColor(BYTE idx, BYTE r, BYTE g, BYTE b, BYTE alpha=0); void SetPaletteColor(BYTE idx, RGBQUAD c); void SetPaletteColor(BYTE idx, COLORREF cr); void SwapIndex(BYTE idx1, BYTE idx2); void SetStdPalette();//@}/** \addtogroup Pixel */ //@{ bool IsInside(long x, long y); bool IsTransparent(long x,long y); RGBQUAD GetPixelColor(long x,long y, bool bGetAlpha = true); BYTE GetPixelIndex(long x,long y); BYTE GetPixelGray(long x, long y); void SetPixelColor(long x,long y,RGBQUAD c, bool bSetAlpha = false); void SetPixelColor(long x,long y,COLORREF cr); void SetPixelIndex(long x,long y,BYTE i); void DrawLine(int StartX, int EndX, int StartY, int EndY, RGBQUAD color, bool bSetAlpha=false); void DrawLine(int StartX, int EndX, int StartY, int EndY, COLORREF cr); void BlendPixelColor(long x,long y,RGBQUAD c, float blend, bool bSetAlpha = false);//@}protected:/** \addtogroup Protected */ //@{ BYTE BlindGetPixelIndex(const long x,const long y); RGBQUAD BlindGetPixelColor(const long x,const long y); void *BlindGetPixelPointer(const long x,const long y);//@}public:#if CXIMAGE_SUPPORT_INTERPOLATION/** \addtogroup Interpolation */ //@{ //overflow methods: enum OverflowMethod { OM_COLOR=1, OM_BACKGROUND=2, OM_TRANSPARENT=3, OM_WRAP=4,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -