1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/imagbmp.h 3 // Purpose: wxImage BMP, ICO, CUR and ANI handlers 4 // Author: Robert Roebling, Chris Elliott 5 // RCS-ID: $Id: imagbmp.h 61872 2009-09-09 22:37:05Z VZ $ 6 // Copyright: (c) Robert Roebling, Chris Elliott 7 // Licence: wxWindows licence 8 ///////////////////////////////////////////////////////////////////////////// 9 10 #ifndef _WX_IMAGBMP_H_ 11 #define _WX_IMAGBMP_H_ 12 13 #include "wx/image.h" 14 15 // defines for saving the BMP file in different formats, Bits Per Pixel 16 // USE: wximage.SetOption( wxIMAGE_OPTION_BMP_FORMAT, wxBMP_xBPP ); 17 #define wxIMAGE_OPTION_BMP_FORMAT wxString(wxT("wxBMP_FORMAT")) 18 19 // These two options are filled in upon reading CUR file and can (should) be 20 // specified when saving a CUR file - they define the hotspot of the cursor: 21 #define wxIMAGE_OPTION_CUR_HOTSPOT_X wxT("HotSpotX") 22 #define wxIMAGE_OPTION_CUR_HOTSPOT_Y wxT("HotSpotY") 23 24 #if WXWIN_COMPATIBILITY_2_4 25 // Do not use these macros, they are deprecated 26 #define wxBMP_FORMAT wxIMAGE_OPTION_BMP_FORMAT 27 #define wxCUR_HOTSPOT_X wxIMAGE_OPTION_CUR_HOTSPOT_X 28 #define wxCUR_HOTSPOT_Y wxIMAGE_OPTION_CUR_HOTSPOT_Y 29 #endif 30 31 32 enum 33 { 34 wxBMP_24BPP = 24, // default, do not need to set 35 //wxBMP_16BPP = 16, // wxQuantize can only do 236 colors? 36 wxBMP_8BPP = 8, // 8bpp, quantized colors 37 wxBMP_8BPP_GREY = 9, // 8bpp, rgb averaged to greys 38 wxBMP_8BPP_GRAY = wxBMP_8BPP_GREY, 39 wxBMP_8BPP_RED = 10, // 8bpp, red used as greyscale 40 wxBMP_8BPP_PALETTE = 11, // 8bpp, use the wxImage's palette 41 wxBMP_4BPP = 4, // 4bpp, quantized colors 42 wxBMP_1BPP = 1, // 1bpp, quantized "colors" 43 wxBMP_1BPP_BW = 2 // 1bpp, black & white from red 44 }; 45 46 // ---------------------------------------------------------------------------- 47 // wxBMPHandler 48 // ---------------------------------------------------------------------------- 49 50 class WXDLLEXPORT wxBMPHandler : public wxImageHandler 51 { 52 public: wxBMPHandler()53 wxBMPHandler() 54 { 55 m_name = wxT("Windows bitmap file"); 56 m_extension = wxT("bmp"); 57 m_type = wxBITMAP_TYPE_BMP; 58 m_mime = wxT("image/x-bmp"); 59 } 60 61 #if wxUSE_STREAMS 62 virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); 63 virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); 64 65 protected: 66 virtual bool DoCanRead( wxInputStream& stream ); 67 bool SaveDib(wxImage *image, wxOutputStream& stream, bool verbose, 68 bool IsBmp, bool IsMask); 69 bool DoLoadDib(wxImage *image, int width, int height, int bpp, int ncolors, 70 int comp, wxFileOffset bmpOffset, wxInputStream& stream, 71 bool verbose, bool IsBmp, bool hasPalette); 72 bool LoadDib(wxImage *image, wxInputStream& stream, bool verbose, bool IsBmp); 73 #endif // wxUSE_STREAMS 74 75 private: 76 DECLARE_DYNAMIC_CLASS(wxBMPHandler) 77 }; 78 79 #if wxUSE_ICO_CUR 80 // ---------------------------------------------------------------------------- 81 // wxICOHandler 82 // ---------------------------------------------------------------------------- 83 84 class WXDLLEXPORT wxICOHandler : public wxBMPHandler 85 { 86 public: wxICOHandler()87 wxICOHandler() 88 { 89 m_name = wxT("Windows icon file"); 90 m_extension = wxT("ico"); 91 m_type = wxBITMAP_TYPE_ICO; 92 m_mime = wxT("image/x-ico"); 93 } 94 95 #if wxUSE_STREAMS 96 virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); 97 virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); 98 virtual bool DoLoadFile( wxImage *image, wxInputStream& stream, bool verbose, int index ); 99 virtual int GetImageCount( wxInputStream& stream ); 100 protected: 101 virtual bool DoCanRead( wxInputStream& stream ); 102 #endif // wxUSE_STREAMS 103 104 private: 105 DECLARE_DYNAMIC_CLASS(wxICOHandler) 106 }; 107 108 109 // ---------------------------------------------------------------------------- 110 // wxCURHandler 111 // ---------------------------------------------------------------------------- 112 113 class WXDLLEXPORT wxCURHandler : public wxICOHandler 114 { 115 public: wxCURHandler()116 wxCURHandler() 117 { 118 m_name = wxT("Windows cursor file"); 119 m_extension = wxT("cur"); 120 m_type = wxBITMAP_TYPE_CUR; 121 m_mime = wxT("image/x-cur"); 122 } 123 124 // VS: This handler's meat is implemented inside wxICOHandler (the two 125 // formats are almost identical), but we hide this fact at 126 // the API level, since it is a mere implementation detail. 127 128 protected: 129 #if wxUSE_STREAMS 130 virtual bool DoCanRead( wxInputStream& stream ); 131 #endif // wxUSE_STREAMS 132 133 private: 134 DECLARE_DYNAMIC_CLASS(wxCURHandler) 135 }; 136 // ---------------------------------------------------------------------------- 137 // wxANIHandler 138 // ---------------------------------------------------------------------------- 139 140 class WXDLLEXPORT wxANIHandler : public wxCURHandler 141 { 142 public: wxANIHandler()143 wxANIHandler() 144 { 145 m_name = wxT("Windows animated cursor file"); 146 m_extension = wxT("ani"); 147 m_type = wxBITMAP_TYPE_ANI; 148 m_mime = wxT("image/x-ani"); 149 } 150 151 152 #if wxUSE_STREAMS 153 virtual bool SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSED(stream), bool WXUNUSED(verbose=true) ){return false ;} 154 virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); 155 virtual int GetImageCount( wxInputStream& stream ); 156 protected: 157 virtual bool DoCanRead( wxInputStream& stream ); 158 #endif // wxUSE_STREAMS 159 160 private: 161 DECLARE_DYNAMIC_CLASS(wxANIHandler) 162 }; 163 164 #endif // wxUSE_ICO_CUR 165 #endif // _WX_IMAGBMP_H_ 166