Gizmo3D

gzImage.h

Go to the documentation of this file.
00001 //******************************************************************************
00002 // File         : gzImage.h
00003 // Module       : gzBase
00004 // Description  : Class definition of the gzImage class
00005 // Author       : Anders Modén      
00006 // Product      : GizmoBase 2.1.1
00007 //      
00008 // Copyright © 2003- Saab Training Systems AB, Sweden
00009 //          
00010 // NOTE:    GizmoBase is a platform abstraction utility layer for C++. It contains 
00011 //          design patterns and C++ solutions for the advanced programmer.
00012 //
00013 //
00014 // Revision History...                          
00015 //                                  
00016 // Who  Date    Description                     
00017 //                                  
00018 // AMO  990223  Created file    
00019 //
00020 //******************************************************************************
00021 #ifndef __GZ_IMAGE_H__
00022 #define __GZ_IMAGE_H__
00023 
00033 #include "gzBase.h"
00034 #include "gzReference.h"
00035 #include "gzSerialize.h"
00036 
00037 #include "gzRGBA.h"
00038 #include "gzObject.h"
00039 
00040 enum gzImageChanges
00041 {
00042     GZ_IMAGE_CHANGE_DATA    =   1<<0    ,
00043     GZ_IMAGE_CHANGE_FORMAT  =   1<<1    ,
00044     GZ_IMAGE_CHANGE_ALL     =   GZ_IMAGE_CHANGE_DATA+GZ_IMAGE_CHANGE_FORMAT
00045 };
00046 
00047 enum gzImageType
00048 {
00051     GZ_IMAGE_TYPE_RGB_8         ,
00054     GZ_IMAGE_TYPE_RGBA_8        ,
00055     GZ_IMAGE_TYPE_BW_8          ,
00056     GZ_IMAGE_TYPE_BWA_8         ,
00057     GZ_IMAGE_TYPE_DEPTHMAP      ,
00058     GZ_IMAGE_TYPE_BITMAP        ,
00059     GZ_IMAGE_TYPE_BGRA_5_5_5_1  ,
00060     GZ_IMAGE_TYPE_BGR_5_6_5     ,
00061     GZ_IMAGE_TYPE_CUSTOM
00062 };
00063 
00064 
00065 //******************************************************************************
00066 // Class    : gzImage
00067 //                                  
00068 // Purpose  : -
00069 //                                  
00070 // Notes    : - 
00071 //                                  
00072 // Revision History...                          
00073 //                                  
00074 // Who  Date    Description                     
00075 //                                  
00076 // AMO  990223  Created 
00077 //                                  
00078 //******************************************************************************
00079 class  gzImage : public gzObject , public gzNameInterface , public gzUpdateIDFeatureInterface
00080 {
00081 public:
00082 
00083     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // typed interface
00084 
00086 
00089     GZ_BASE_EXPORT gzImage(const gzString & name=GZ_EMPTY_STRING);
00090     
00092     GZ_BASE_EXPORT virtual ~gzImage(){};
00093     
00094     // Methods
00095 
00096     GZ_BASE_EXPORT gzVoid   setAlignment(gzUByte alignment);
00097     GZ_BASE_EXPORT gzVoid   setSwapBytes(gzBool swap);
00098     GZ_BASE_EXPORT gzVoid   setRowLength(gzUInt rowLength);
00099     GZ_BASE_EXPORT gzVoid   setSkipRows(gzUInt skiprows);
00100     GZ_BASE_EXPORT gzVoid   setSkipPixels(gzUInt skippix);
00101     GZ_BASE_EXPORT gzVoid   setLSBFirst(gzBool lsbfirst);
00102 
00104     GZ_BASE_EXPORT gzVoid   setWidth(gzULong width);
00105 
00107     GZ_BASE_EXPORT gzVoid   setHeight(gzULong height);
00108 
00110     GZ_BASE_EXPORT gzVoid   setSize(gzULong width , gzULong height);
00111 
00112     GZ_BASE_EXPORT gzVoid   setFormat(gzEnum format);
00113     GZ_BASE_EXPORT gzVoid   setCompressedFormat(gzEnum format);
00114 
00115     GZ_BASE_EXPORT gzVoid   setComponentType(gzEnum type);
00116     GZ_BASE_EXPORT gzVoid   setComponents(gzUByte components);
00117     GZ_BASE_EXPORT gzVoid   setBytesPerComponent(gzFloat size);
00118 
00120     GZ_BASE_EXPORT gzBool   isCompressed()          { return m_compressedFormat!=0; }   
00121 
00123     GZ_BASE_EXPORT virtual  gzBool compress(gzEnum compressFormat);
00124     GZ_BASE_EXPORT virtual  gzBool uncompress();
00125 
00126 
00127     GZ_BASE_EXPORT gzUByte  getAlignment()          { return m_alignment;       }
00128     GZ_BASE_EXPORT gzBool   getSwapBytes()          { return m_swapBytes;       }
00129     GZ_BASE_EXPORT gzUInt   getRowLength()          { return m_rowLength;       }
00130     GZ_BASE_EXPORT gzUInt   getSkipRows()           { return m_skipRows;        }
00131     GZ_BASE_EXPORT gzUInt   getSkipPixels()         { return m_skipPixels;      }
00132     GZ_BASE_EXPORT gzBool   getLSBFirst()           { return m_lsbFirst;        }
00133                                                                                 
00135     GZ_BASE_EXPORT gzULong  getWidth()              { return m_width;           }
00136 
00138     GZ_BASE_EXPORT gzULong  getHeight()             { return m_height;          }
00139 
00141     GZ_BASE_EXPORT gzEnum   getFormat()             { return m_format;          }
00142 
00144     GZ_BASE_EXPORT gzEnum   getCompressedFormat()   { return m_compressedFormat;}
00145 
00146     GZ_BASE_EXPORT gzEnum   getComponentType()      { return m_componentType;           }
00147     GZ_BASE_EXPORT gzUByte  getComponents()         { return m_components;      }
00148     GZ_BASE_EXPORT gzFloat  getBytesPerComponent()  { return m_bytesPerComponent; }
00149 
00151     GZ_BASE_EXPORT gzImageType  getImageType()      { return m_imageType; }
00152 
00154 
00161     GZ_BASE_EXPORT gzImage * reSample(gzULong width , gzULong height , gzImage *template_image=NULL , gzBool sample=TRUE , gzInt sampleWidth=2,gzBool progress=FALSE);
00162 
00164 
00168     GZ_BASE_EXPORT gzImage * create(gzImage *template_image=NULL,gzRGBASwizzle swizzle=GZ_MAP_RGBA_TO_RGBA , gzFloat R_factor =GZ_FLOAT_ONE, gzFloat G_factor =GZ_FLOAT_ONE, gzFloat B_factor =GZ_FLOAT_ONE, gzFloat A_factor =GZ_FLOAT_ONE , gzFloat C_value=GZ_FLOAT_ONE); 
00169 
00171 
00176     GZ_BASE_EXPORT gzVoid copyFrom(gzImage *image,gzRGBASwizzle swizzle=GZ_MAP_RGBA_TO_RGBA , gzFloat R_factor =GZ_FLOAT_ONE, gzFloat G_factor =GZ_FLOAT_ONE, gzFloat B_factor =GZ_FLOAT_ONE, gzFloat A_factor =GZ_FLOAT_ONE , gzFloat C_value=GZ_FLOAT_ONE);
00177 
00178     // Utility methods to manage image contents
00179 
00181     GZ_BASE_EXPORT  gzVoid  invert();
00182 
00183     GZ_BASE_EXPORT  gzVoid  toGray();
00184     GZ_BASE_EXPORT  gzVoid  alphaMask(gzDouble level); 
00185     GZ_BASE_EXPORT  gzVoid  alphaMask(gzRGBA mask); // Only mask for RGB values
00186     
00188     GZ_BASE_EXPORT  gzVoid  flipVertical();
00189 
00191     GZ_BASE_EXPORT  gzVoid  flipHorizontal();
00192 
00193 
00194     // Alpha checking utilites
00196 
00200     GZ_BASE_EXPORT gzBool   hasSignificantAlpha(gzBool evaluateDDS =FALSE); 
00201 
00203 
00207     GZ_BASE_EXPORT gzBool   hasContiniousAlpha(gzBool evaluateDDS =FALSE,gzFloat minMaxDiff=0.05);  
00208     
00209     // Commonn access methods
00211     GZ_BASE_EXPORT virtual gzBool  hasAlphaComponent();         
00212 
00214     GZ_BASE_EXPORT virtual gzULong getRowSize(gzULong width);   
00215     
00217     GZ_BASE_EXPORT virtual gzULong getArraySize(gzULong width=0 , gzULong height=0 );   
00218 
00220     GZ_BASE_EXPORT virtual gzRGBA  getPixel(gzULong width , gzULong height );
00221 
00223     GZ_BASE_EXPORT virtual gzVoid  setPixel(gzULong width , gzULong height , const gzRGBA &value);
00224 
00225 
00226     GZ_BASE_EXPORT gzDynamicArray<gzUByte> &    getArray()      { return m_data; }
00227     GZ_BASE_EXPORT gzDynamicArray<gzUByte> &    createArray(gzBool clearData=FALSE);    // Based on width and height etc.
00228     GZ_BASE_EXPORT gzVoid           setArray(const gzDynamicArray<gzUByte> &array);
00229     GZ_BASE_EXPORT gzBool           hasCreatedArray()           { return m_hasCreatedArray; }
00230     GZ_BASE_EXPORT gzVoid           setCreatedArray(gzBool on)  { m_hasCreatedArray=on; }
00231 
00232     GZ_BASE_EXPORT virtual gzImage *cloneImageType() const;
00233     GZ_BASE_EXPORT virtual gzReference *clone() const;  
00234 
00235     // Sub Images (mipmaps,animations etc.)
00236 
00238     GZ_BASE_EXPORT gzBool   hasSubImage();
00239 
00241     GZ_BASE_EXPORT gzULong  getNumberOfSubImages();
00242 
00244     GZ_BASE_EXPORT gzImage *getSubImage(gzULong index);
00245 
00246     GZ_BASE_EXPORT gzRefList<gzImage> &getSubImageList();
00247 
00249 
00252     GZ_BASE_EXPORT gzVoid   addSubImage(gzImage *image,gzLong index = -1);
00253 
00255     GZ_BASE_EXPORT gzVoid   removeSubImage(gzImage *image);
00256 
00258     GZ_BASE_EXPORT gzVoid   removeAllSubImages();
00259 
00260     // ---- Serializing --------------------------------
00261 
00263     GZ_BASE_EXPORT virtual gzVoid write(gzSerializeAdapter *adapter);
00264 
00266     GZ_BASE_EXPORT virtual gzVoid read(gzSerializeAdapter *adapter);
00267 
00269     GZ_BASE_EXPORT virtual gzULong  getDataSize(gzSerializeAdapter *adapter=NULL) const;
00270 
00271     // Image templates
00272 
00274 
00283     GZ_BASE_EXPORT static gzImage *createImage(gzImageType type , const gzString & name=GZ_EMPTY_STRING);
00284 
00285 
00286 protected:
00287 
00288     GZ_BASE_EXPORT gzFloat  sampleFunction(gzFloat x);
00289     GZ_BASE_EXPORT gzVoid   setImageType(gzImageType type);
00290 
00291 
00292     gzDynamicArray<gzUByte>             m_data;
00293                                         
00294     gzUInt                              m_rowLength;
00295     gzUInt                              m_skipRows;
00296     gzUInt                              m_skipPixels;
00297                                         
00298     gzULong                             m_width;
00299     gzULong                             m_height;
00300     gzEnum                              m_format;
00301     gzEnum                              m_compressedFormat;
00302     gzEnum                              m_componentType;
00303     gzImageType                         m_imageType;
00304                                         
00305     gzULong                             m_calculatedRowSize;
00306                                         
00307     gzUByte                             m_components;
00308     gzUByte                             m_alignment;
00309     gzFloat                             m_bytesPerComponent;
00310                                         
00311     gzBool                              m_hasCreatedArray:1;
00312     gzBool                              m_hasCalculatedRowSize:1;
00313     gzBool                              m_lsbFirst:1;
00314     gzBool                              m_swapBytes:1;
00315     
00316     gzLateBindData<gzRefList<gzImage> > m_subImageList;
00317 };
00318 
00319 // Declare smart pointer type
00320 GZ_DECLARE_REFPTR(gzImage);
00321 
00322 #define GZ_EVALUATE_EXTENSION ("<*!*>")
00323 
00324 // !Image loader flags
00327 #define GZ_IMAGE_FLAG_NUM(x)    (gzSerializeAdapterFlags)(1<<( x+GZ_SERIALIZE_ADAPTER_FLAG_MAX_SIZE))
00328 
00329 const gzSerializeAdapterFlags   GZ_IMAGE_FLAGS_DEFAULT                      =   (gzSerializeAdapterFlags)0;
00330 
00334 const gzSerializeAdapterFlags   GZ_IMAGE_FLAGS_FLIP_DDS_IMAGES              =   GZ_IMAGE_FLAG_NUM(0);
00335 
00342 const gzSerializeAdapterFlags   GZ_IMAGE_FLAGS_NO_CACHED_IMAGE              =   GZ_IMAGE_FLAG_NUM(1);
00343 
00349 const gzSerializeAdapterFlags   GZ_IMAGE_FLAGS_NO_ALTERNATE_IMAGE_EXT       =   GZ_IMAGE_FLAG_NUM(2);
00350 const gzSerializeAdapterFlags   GZ_IMAGE_FLAGS_IGNORE_IMAGE_MIPMAPS         =   GZ_IMAGE_FLAG_NUM(3);
00351 
00353 const gzSerializeAdapterFlags   GZ_IMAGE_FLAGS_NO_DXT1_ALPHA                =   GZ_IMAGE_FLAG_NUM(4);
00354 
00356 const gzULongLong GZ_IMAGE_FLAG_MAX_SIZE    =   GZ_SERIALIZE_ADAPTER_FLAG_MAX_SIZE+5;   // Number of flags in image flag set
00357 
00358 //******************************************************************************
00359 // Class    : gzImageManager
00360 //                                  
00361 // Purpose  : -
00362 //                                  
00363 // Notes    : - 
00364 //                                  
00365 // Revision History...                          
00366 //                                  
00367 // Who  Date    Description                     
00368 //                                  
00369 // AMO  990223  Created 
00370 //                                  
00371 //******************************************************************************
00372 
00373 class  gzImageManager : public gzReference
00374 {
00375 public:
00377     GZ_BASE_EXPORT virtual ~gzImageManager(){};
00378 
00380     GZ_BASE_EXPORT static gzVoid    registerManager(gzImageManager *manager);
00381 
00383     GZ_BASE_EXPORT static gzVoid    unregisterManager(gzImageManager *manager);
00384 
00386     GZ_BASE_EXPORT static gzVoid    unregisterManagers();
00387         
00389     GZ_BASE_EXPORT static gzImage   *loadImage(const gzString &url , gzString extension=GZ_EVALUATE_EXTENSION , gzSerializeAdapterFlags flags=GZ_IMAGE_FLAGS_DEFAULT , gzULong version=0 , const gzString &password=GZ_EMPTY_STRING);
00390 
00392     GZ_BASE_EXPORT virtual gzImage  *loadImage(gzSerializeAdapter *adapter);
00393 
00395     GZ_BASE_EXPORT static gzBool    saveImage(gzImage *image , const gzString &url , gzString extension=GZ_EVALUATE_EXTENSION , gzSerializeAdapterFlags flags=GZ_IMAGE_FLAGS_DEFAULT , gzULong version=0, const gzString &password=GZ_EMPTY_STRING);
00396 
00398     GZ_BASE_EXPORT virtual gzBool   saveImage(gzImage *image , gzSerializeAdapter *adapter);
00399 
00400     GZ_BASE_EXPORT static gzVoid    clearCachedImages(gzBool leaveShared=TRUE);
00401 
00402     GZ_BASE_EXPORT static gzVoid    updateCachedImage(gzImage *oldImage , gzImage *newImage);
00403 
00404     GZ_BASE_EXPORT static gzVoid    registerImageFactoryObjects();
00405 
00406     GZ_BASE_EXPORT static gzString  getAllExtensions();
00407 
00409     GZ_BASE_EXPORT virtual gzString getExtensions()=0;
00410 
00412     GZ_BASE_EXPORT virtual gzULong  getVersion(const gzString &extension)=0;
00413 
00414 protected:
00415 
00417     GZ_BASE_EXPORT virtual gzVoid   registerManager(const gzString &extension);
00418 
00419     static gzRefDict<gzString,gzImageManager> s_registeredImageManagers;
00420 
00421     static gzRefDict<gzString,gzImage>  s_imageCache;
00422 
00423 };  
00424             
00425 #endif

Documentation for Gizmo3D generated at Wed Feb 20 11:54:05 2008 by   Saab Training Systems AB, ¸ (c) 2003-and beyond