00001
00005
00006 #ifndef _H_IMG_PixmapRGBA32
00007 #define _H_IMG_PixmapRGBA32
00008
00009 #include "IMG_Pixmap.h"
00010 #include "IMG_MemPtr.h"
00011 #include "IMG_Color.h"
00012
00013
00022
00023 class IMG_PixmapRGBA32 : public IMG_Pixmap {
00024 public:
00026 typedef TUns32 TPixelRGBA32;
00027
00029 typedef TPixelRGBA32* TPixelPtr;
00030
00032 IMG_MemPtr<TPixelRGBA32> m_mem;
00033
00042 IMG_PixmapRGBA32(TUns32 width, TUns32 height);
00043
00054 IMG_PixmapRGBA32(void* image, TUns32 width, TUns32 height, TUns32 rowBytes);
00055
00056 #if 0
00057
00060 virtual ~IMG_PixmapRGBA32();
00061 #endif
00062
00070 virtual void fillRect(const IMG_Rect& r, const IMG_ColorRGB& c);
00071
00079 virtual void fillRect(const IMG_Rect& r, const IMG_ColorRGBA& c);
00080
00090 virtual void setPixmap(const IMG_PixmapRGBA32& src, const IMG_Rect& srcBnds, const IMG_Rect& destBnds);
00091
00101 virtual void blendPixmap(const IMG_PixmapRGBA32& src, const IMG_Rect& srcBnds, const IMG_Rect& destBnds);
00102
00103 protected:
00112 inline TPixelPtr getPixelPtr(TUns32 x, TUns32 y) const;
00113
00119 inline TPixelRGBA32 getPixelValue(const IMG_ColorRGBA& c) const;
00120
00126 inline void getColor(TPixelRGBA32 p, IMG_ColorRGBA& c) const;
00127 };
00128
00129
00130 inline IMG_PixmapRGBA32::TPixelPtr IMG_PixmapRGBA32::getPixelPtr(TUns32 x, TUns32 y) const
00131 {
00132 return (TPixelPtr) (((TUns8*)m_image) + (y*m_rowBytes) + (x<<2));
00133 }
00134
00135
00136 inline IMG_PixmapRGBA32::TPixelRGBA32 IMG_PixmapRGBA32::getPixelValue(const IMG_ColorRGBA& c) const
00137 {
00138 TPixelRGBA32 p = ((TPixelRGBA32) (((float) 0xFF) * c.m_a)) << 24;
00139 p |= ((TPixelRGBA32) (((float) 0xFF) * c.m_b)) << 16;
00140 p |= ((TPixelRGBA32) (((float) 0xFF) * c.m_g)) << 8;
00141 p |= ((TPixelRGBA32) (((float) 0xFF) * c.m_r));
00142 return p;
00143 }
00144
00145 inline void IMG_PixmapRGBA32::getColor(TPixelRGBA32 p, IMG_ColorRGBA& c) const
00146 {
00147 c.m_a = ((float) ((p >> 24) & 0x00FF)) / ((float) 0xFF);
00148 c.m_b = ((float) ((p >> 16) & 0x00FF)) / ((float) 0xFF);
00149 c.m_g = ((float) ((p >> 8) & 0x00FF)) / ((float) 0xFF);
00150 c.m_r = ((float) ( p & 0x00FF)) / ((float) 0xFF);
00151 }
00152
00153 #endif // _H_IMG_PixmapRGBA32