IrrlichtEngine
IImage.h
Go to the documentation of this file.
00001 // Copyright (C) 2002-2011 Nikolaus Gebhardt
00002 // This file is part of the "Irrlicht Engine".
00003 // For conditions of distribution and use, see copyright notice in irrlicht.h
00004 
00005 #ifndef __I_IMAGE_H_INCLUDED__
00006 #define __I_IMAGE_H_INCLUDED__
00007 
00008 #include "IReferenceCounted.h"
00009 #include "position2d.h"
00010 #include "rect.h"
00011 #include "SColor.h"
00012 
00013 namespace irr
00014 {
00015 namespace video
00016 {
00017 
00019 
00022 class IImage : public virtual IReferenceCounted
00023 {
00024 public:
00025 
00027 
00032         virtual void* lock() = 0;
00033 
00035 
00037         virtual void unlock() = 0;
00038 
00040         virtual const core::dimension2d<u32>& getDimension() const = 0;
00041 
00043         virtual u32 getBitsPerPixel() const = 0;
00044 
00046         virtual u32 getBytesPerPixel() const = 0;
00047 
00049         virtual u32 getImageDataSizeInBytes() const = 0;
00050 
00052         virtual u32 getImageDataSizeInPixels() const = 0;
00053 
00055         virtual SColor getPixel(u32 x, u32 y) const = 0;
00056 
00058         virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0;
00059 
00061         virtual ECOLOR_FORMAT getColorFormat() const = 0;
00062 
00064         virtual u32 getRedMask() const = 0;
00065 
00067         virtual u32 getGreenMask() const = 0;
00068 
00070         virtual u32 getBlueMask() const = 0;
00071 
00073         virtual u32 getAlphaMask() const = 0;
00074 
00076         virtual u32 getPitch() const =0;
00077 
00079         virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0;
00080 
00082         virtual void copyToScaling(IImage* target) =0;
00083 
00085         virtual void copyTo(IImage* target, const core::position2d<s32>& pos=core::position2d<s32>(0,0)) =0;
00086 
00088         virtual void copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect=0) =0;
00089 
00091         virtual void copyToWithAlpha(IImage* target, const core::position2d<s32>& pos,
00092                         const core::rect<s32>& sourceRect, const SColor &color,
00093                         const core::rect<s32>* clipRect = 0) =0;
00094 
00096         virtual void copyToScalingBoxFilter(IImage* target, s32 bias = 0, bool blend = false) = 0;
00097 
00099         virtual void fill(const SColor &color) =0;
00100 
00102         static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
00103         {
00104                 switch(format)
00105                 {
00106                 case ECF_A1R5G5B5:
00107                         return 16;
00108                 case ECF_R5G6B5:
00109                         return 16;
00110                 case ECF_R8G8B8:
00111                         return 24;
00112                 case ECF_A8R8G8B8:
00113                         return 32;
00114                 case ECF_R16F:
00115                         return 16;
00116                 case ECF_G16R16F:
00117                         return 32;
00118                 case ECF_A16B16G16R16F:
00119                         return 64;
00120                 case ECF_R32F:
00121                         return 32;
00122                 case ECF_G32R32F:
00123                         return 64;
00124                 case ECF_A32B32G32R32F:
00125                         return 128;
00126                 default:
00127                         return 0;
00128                 }
00129         }
00130 
00132 
00135         static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format)
00136         {
00137                 switch(format)
00138                 {
00139                         case ECF_A1R5G5B5:
00140                         case ECF_R5G6B5:
00141                         case ECF_R8G8B8:
00142                         case ECF_A8R8G8B8:
00143                                 return false;
00144                         default:
00145                                 return true;
00146                 }
00147         }
00148 
00149 };
00150 
00151 } // end namespace video
00152 } // end namespace irr
00153 
00154 #endif
00155