CIMAGEB.H
上传用户:wep9318
上传日期:2007-01-07
资源大小:893k
文件大小:4k
源码类别:

图片显示

开发平台:

Visual C++

  1. /*
  2.  * File: cimageb.h
  3.  * Purpose: Declaration of the Platform Independent Image Class
  4.  * Author: Alejandro Aguilar Sierra
  5.  * Created: 1995
  6.  * Description: This class adds drawing routines and color map management.
  7.  *
  8.  * Copyright: (c) 1995, Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
  9.  */
  10. #ifndef CIMAGEBH
  11. #define CIMAGEBH
  12. #include "stdafx.h"
  13. #include "cmap.h"
  14. #define CIMAGE_COLORS DIB_PAL_COLORS
  15. #define CIMAGE_SUPPORT_BMP 1
  16. #define CIMAGE_SUPPORT_GIF 1
  17. #define CIMAGE_SUPPORT_JPEG 1
  18. #define CIMAGE_SUPPORT_PNG  1
  19. #define CIMAGE_SUPPORT_XPM  1
  20. #ifndef byte
  21. typedef unsigned char byte;
  22. #endif
  23. #ifdef WIN32
  24. typedef byte* ImagePointerType;
  25. #else
  26. typedef byte huge* ImagePointerType;
  27. #endif
  28. typedef struct
  29. {
  30. byte red;
  31. byte green;
  32.    byte blue;
  33. } rgb_color_struct;
  34. #ifndef byte
  35. typedef unsigned char byte;
  36. #endif
  37. #define COLORTYPE_PALETTE 1
  38. #define COLORTYPE_COLOR 2
  39. #define COLORTYPE_ALPHA 4
  40. class CImageImpl
  41. {
  42. protected:
  43.   ImagePointerType RawImage;   //  Image data
  44.   int Width, Height;    //  Dimensions
  45.   int Depth;   // (bits x pixel)
  46.   int ColorType; // Bit 1 = Palette used
  47. // Bit 2 = Color used
  48. // Bit 3 = Alpha used
  49.   long EffWidth;   // Effective Width
  50.   LPBITMAPINFOHEADER lpbi;
  51.   int bgindex;
  52.   CImagePalette* imagePalette;
  53. friend class CImageIterator;
  54. public:
  55. // Constructors
  56.   CImageImpl();
  57.   CImageImpl(int width, int height, int depth, int colortype=-1);
  58.   CImageImpl( const CImageImpl *ima );
  59.   // Destructor
  60.   virtual ~CImageImpl();
  61.   //  Image Information
  62.   int  GetWidth( void ) const { return Width; };
  63.   int  GetHeight( void ) const { return Height; };
  64.   int  GetDepth( void ) const { return Depth; };
  65.   int  GetColorType( void ) const { return ColorType; };
  66.   virtual BOOL Inside(int x, int y);
  67.   virtual void Create(int width, int height, int deep, int colortype=-1);
  68.   // Drawing routines
  69.   BOOL Draw(CDC *dc, int x=0, int y=0, int dx=-1, int dy=-1, int xs=0, int ys=0);
  70.   BOOL Stretch(CDC *dc, int xd=0, int yd=0, int dxd=-1, int dyd=-1,
  71.  int xs=0, int ys=0, int dxs=-1, int dys=-1);
  72.   virtual int  GetIndex(int x, int y);
  73.   virtual BOOL GetRGB(int x, int y, byte* r, byte* g, byte* b);
  74.   virtual BOOL SetIndex(int x, int y, int index);
  75.   virtual BOOL SetRGB(int x, int y, byte r, byte g, byte b);
  76. // ColorMap settings
  77.   BOOL SetPalette(CImagePalette* palette);
  78.   BOOL SetPalette(int n, rgb_color_struct *rgb_struct);
  79.   BOOL SetPalette(int n, byte *r, byte *g=0, byte *b=0);
  80.   CImagePalette* GetPalette() const { return imagePalette; }
  81.   
  82.   inline ImagePointerType GetRawImage() { return RawImage; }
  83.   inline LPBITMAPINFOHEADER GetBits() { return lpbi; }
  84.   inline long GetEffWidth() { return EffWidth; }
  85.   virtual BOOL ReadFile(const CString& imageFileName="") { return FALSE; }
  86.   virtual BOOL SaveFile(const CString& imageFileName="") { return FALSE; }
  87.   // 'Copy' the raw image data et. from 'from' to 'this'. NULLify these attributes
  88.   // in 'from' so we can then delete it without deleting the raw image data.
  89.   void TransferBits(CImageImpl *from);
  90. };
  91. inline
  92. CImageImpl::CImageImpl(): /*ImaBase(),*/ imagePalette(0), lpbi(0)
  93. {
  94.   RawImage = 0; 
  95.   Width = Height = 0;
  96.   Depth = 0;
  97.   ColorType = 0;
  98.   bgindex = -1;
  99. }
  100. inline
  101. CImageImpl::CImageImpl(int width, int height, int depth, int colortype): imagePalette(0), lpbi(0)
  102. {
  103.   Width = Height = 0;
  104.   Depth = 0;
  105.   ColorType = 0;
  106.   bgindex = -1;
  107.   RawImage = 0;
  108.   Create(width, height, depth, colortype);
  109. }
  110. inline
  111. CImageImpl::CImageImpl( const CImageImpl *ima ): imagePalette(0), lpbi(0)
  112. {
  113.   bgindex = -1;
  114.   if (ima) {
  115.  Create(ima->GetWidth(), ima->GetHeight(), ima->GetDepth(), ima->GetColorType());
  116.      if (ima->GetPalette())
  117.    SetPalette(new CImagePalette(ima->GetPalette()));
  118.   }
  119. }
  120. inline
  121. BOOL CImageImpl::Inside(int x, int y)
  122. {
  123.   return (0<=y && y<Height && 0<=x && x<Width);
  124. }
  125. #endif