00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __FREEIMAGEIMAGE_H__
00030 #define __FREEIMAGEIMAGE_H__
00031
00032 #include "H3DApi.h"
00033 #include "Image.h"
00034 #include "Exception.h"
00035
00036 #ifdef HAVE_FREEIMAGE
00037 #ifdef _MSC_VER
00038 #pragma comment( lib, "FreeImage.lib" )
00039 #endif
00040
00041 #include <FreeImage.h>
00042
00043 namespace H3D {
00046 H3D_VALUE_EXCEPTION( FREE_IMAGE_COLOR_TYPE,
00047 UnsupportedFreeImageColorType );
00050 H3D_VALUE_EXCEPTION( FREE_IMAGE_TYPE, UnsupportedFreeImageImageType );
00051
00055 class H3DAPI_API FreeImageImage: public Image {
00056 public:
00060 FreeImageImage( FIBITMAP *_bitmap ):
00061 bitmap( _bitmap ){}
00062
00064 virtual unsigned int width() {
00065 return FreeImage_GetWidth( bitmap );
00066 }
00067
00069 virtual unsigned int height() {
00070 return FreeImage_GetHeight( bitmap );
00071 }
00072
00074 virtual unsigned int depth() {
00075 return 1;
00076 }
00077
00079 virtual unsigned int bitsPerPixel() {
00080 return FreeImage_GetBPP( bitmap );
00081 }
00082
00084 virtual PixelType pixelType() {
00085 FREE_IMAGE_COLOR_TYPE t = FreeImage_GetColorType( bitmap );
00086 switch( t ) {
00087 case FIC_MINISBLACK:
00088 case FIC_MINISWHITE: return LUMINANCE;
00089 #ifdef FREEIMAGE_BIGENDIAN
00090 case FIC_RGB: return RGB;
00091 case FIC_RGBALPHA: return RGBA;
00092 #else
00093 case FIC_RGB: return BGR;
00094 case FIC_RGBALPHA: return BGRA;
00095 #endif
00096 default:
00097 throw UnsupportedFreeImageColorType( t, "", H3D_FULL_LOCATION );
00098 }
00099 }
00100
00102 virtual PixelComponentType pixelComponentType() {
00103 FREE_IMAGE_TYPE t = FreeImage_GetImageType( bitmap );
00104 switch( t ) {
00105 case FIT_BITMAP:
00106 case FIT_UINT16:
00107 case FIT_UINT32: return UNSIGNED;
00108 case FIT_INT16:
00109 case FIT_INT32: return SIGNED;
00110 case FIT_DOUBLE:
00111 case FIT_FLOAT: return RATIONAL;
00112 default:
00113 throw UnsupportedFreeImageImageType( t, "", H3D_FULL_LOCATION );
00114 }
00115 }
00116
00118 virtual void *getImageData() {
00119 return FreeImage_GetBits( bitmap );
00120 }
00121
00122 protected:
00123 FIBITMAP *bitmap;
00124 };
00125
00126
00127 }
00128
00129 #endif // HAVE_FREEIMAGE
00130 #endif
00131
00132