IMAGEOBJECT.H
上传用户:alisonmail
上传日期:2013-02-28
资源大小:500k
文件大小:4k
源码类别:

图片显示

开发平台:

Visual C++

  1. // ImageObject.h
  2. #ifndef __IMAGEOBJECT_H__
  3. #define __IMAGEOBJECT_H__
  4. #include "Errors.h"
  5. #include "ImageLoad.h"
  6. #define POPULARITY_PALETTE 0
  7. #define MEDIAN_CUT_PALETTE 1
  8. #define FIXED_PALETTE 2
  9. #pragma pack(1)
  10. typedef struct{
  11. unsigned short m_nBlueList[256];
  12. } GREENLIST;
  13. typedef struct{
  14. GREENLIST *m_pGreenList[256];
  15. } REDLIST;
  16. typedef struct{
  17. unsigned short nCount;
  18. unsigned char ucRed;
  19. unsigned char ucGreen;
  20. unsigned char ucBlue;
  21. } COUNTLIST;
  22. #pragma pack()
  23. #define GETRGB555( a, b, c, d ) { WORD *wData = (WORD *) d; a = (unsigned char) ( ( (*wData) & 0x7c00 ) >> 7 ); b = (unsigned char) ( ( (*wData) & 0x03e0 ) >> 2 ); c = (unsigned char) ( ( (*wData) & 0x001f ) << 3 ); }
  24. #define GETRGB565( a, b, c, d ) { WORD *wData = (WORD *) d; a = (unsigned char) ( ( (*wData) & 0xf800 ) >> 8 ); b = (unsigned char) ( ( (*wData) & 0x07e0 ) >> 3 ); c = (unsigned char) ( ( (*wData) & 0x001f ) << 3 ); }
  25. #define GETRGB888( a, b, c, d ) { DWORD *dwData = (DWORD *) d; a = (unsigned char) ( (*dwData) >> 16 ); b = (unsigned char) ( ( (*dwData) & 0x0000ff00 ) >> 8 ); c = (unsigned char) ( (*dwData) & 0x000000ff ); }
  26. #define PUTRGB555( a, b, c, d ) { WORD *wData = (WORD *) d; *wData = ( ( ( (WORD) a & 0x00f8 ) << 7 ) | ( ( (WORD) b & 0x00f8 ) << 2 ) | ( (WORD) c >> 3 ) ); }
  27. #define PUTRGB565( a, b, c, d ) { WORD *wData = (WORD *) d; *wData = ( ( ( (WORD) a & 0x00f8 ) << 8 ) | ( ( (WORD) b & 0x00fc ) << 3 ) | ( (WORD) c >> 3 ) ); }
  28. #define PUTRGB888( a, b, c, d ) { DWORD *dwData = (DWORD *) d; *dwData = ( (DWORD) a << 16 ) | ( (DWORD) b << 8 ) | (DWORD) c; }
  29. #define _RGB(r,g,b) (WORD)(((b)&~7)<<7)|(((g)&~7)<<2)|((r)>>3)
  30. class CImageObject
  31. {
  32. public:
  33. CImageObject();
  34. CImageObject( const char *, CDC *pDC = NULL, int nX = -1, int nY = -1 );
  35. ~CImageObject();
  36. BOOL Load( const char *, CDC *pDC = NULL, int nX = -1, int nY = -1 );
  37. int GetLastError( void );
  38. BOOL Save( const char *, int nType = -1 );
  39. int GetWidth( void );
  40. int GetHeight( void );
  41. int GetNumBits( void );
  42. int GetNumColors( void );
  43. BOOL GetPaletteData( RGBQUAD * );
  44. RGBQUAD *GetPaletteData( void );
  45. int GetImageType( const char * );
  46. int GetImageType( void );
  47. BOOL GetImageInfo( const char *, int *pnWidth = NULL,
  48. int *pnHeight = NULL, int *pnPlanes = NULL,
  49. int *pnBitsPerPixel = NULL, int *pnNumColors = NULL );
  50. BOOL Draw( CDC *, int x = -1, int y = -1 );
  51. BOOL SetPalette( CDC * );
  52. void SetPaletteCreationType( int );
  53. int GetPaletteCreationType( void );
  54. BOOL IsLoaded( void );
  55. int ExtensionIndex( const char * );
  56. BOOL Crop( int, int, int, int );
  57. BOOL Stretch( int, int );
  58. BOOL Rotate( int );
  59. BOOL Invert( void );
  60. BOOL Reverse( void );
  61. BOOL RotateIt( int );
  62. void Rotate90( unsigned char *, unsigned char * );
  63. void Rotate270( unsigned char *, unsigned char * );
  64. BOOL ChangeFormat( int );
  65. int GetPaletteBytes( void );
  66. HGLOBAL GetDib( void );
  67. CPalette *GetPalette( void );
  68. void operator= (const CImageObject &ImageObject);
  69. void NormalizeCoordinates( int *, int *, int *, int *, BOOL *bCompleteImage = NULL, BOOL *bLessThanHalf = NULL );
  70. void *GetDIBPointer( int *nWidthBytes = NULL, int nNewBits = 0, int *nNewWidthBytes = NULL, int nNewWidth = -1 );
  71. LOGPALETTE *GetLogPal( void );
  72. LOGPALETTE *CreateLogPalette( RGBQUAD *Palette, int NumColors );
  73. int GetNearestIndex( unsigned char, unsigned char, unsigned char, RGBQUAD *, int );
  74. void SetQuality( int nQual ){ m_nQuality = nQual; }
  75. static char *szExtensions[7];
  76. int m_nLastError;
  77. int m_nScreenPlanes, m_nScreenBits, m_nPaletteBytes;
  78. void ProcessPalette( void );
  79. int WidthBytes( int, int );
  80. void SetDib( HGLOBAL hDib ){ m_hDib = hDib; }
  81. void SetLogPal( LOGPALETTE *pLogPal ){ m_pLogPal = pLogPal; }
  82. protected:
  83. void InitVars( BOOL bFlag = FALSE );
  84. void ProcessImageHeader( void );
  85. void KillImage( void );
  86. void CreatePaletteFromDIB( RGBQUAD *, int );
  87. LOGPALETTE *CreatePaletteFromBitmap( int, unsigned char *, int, int, int );
  88. RGBQUAD *MakePopularityPalette( int, unsigned char *, int, int, int );
  89. RGBQUAD *MakeMedianCutPalette( int, unsigned char *, int, int, int );
  90. RGBQUAD *MakeFixedPalette( int );
  91. int m_nWidth, m_nHeight, m_nPlanes, m_nBits, m_nColors, m_nImageType;
  92. int m_nX, m_nY;
  93. int m_nQuality;
  94. int m_nPaletteCreationType;
  95. CPalette m_Palette;
  96. HGLOBAL m_hDib;
  97. char *m_pszFilename;
  98. LOGPALETTE *m_pLogPal;
  99. };
  100. #endif