X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d6d29abb44ccfabdd071741a8a4623ea02f470b8..92c0fc34c104c8d7c12d6a3b78ea232690fc23f4:/interface/wx/image.h?ds=sidebyside diff --git a/interface/wx/image.h b/interface/wx/image.h index c7eb7732e5..9ae1bb0a06 100644 --- a/interface/wx/image.h +++ b/interface/wx/image.h @@ -2,7 +2,6 @@ // Name: image.h // Purpose: interface of wxImageHandler and wxImage // Author: wxWidgets team -// RCS-ID: $Id$ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -74,6 +73,57 @@ enum wxImagePNGType wxPNG_TYPE_PALETTE = 4 ///< Palette encoding. }; + +/** + Image option names. +*/ +#define wxIMAGE_OPTION_QUALITY wxString("quality") +#define wxIMAGE_OPTION_FILENAME wxString("FileName") +#define wxIMAGE_OPTION_RESOLUTION wxString("Resolution") +#define wxIMAGE_OPTION_RESOLUTIONX wxString("ResolutionX") +#define wxIMAGE_OPTION_RESOLUTIONY wxString("ResolutionY") +#define wxIMAGE_OPTION_RESOLUTIONUNIT wxString("ResolutionUnit") +#define wxIMAGE_OPTION_MAX_WIDTH wxString("MaxWidth") +#define wxIMAGE_OPTION_MAX_HEIGHT wxString("MaxHeight") +#define wxIMAGE_OPTION_ORIGINAL_WIDTH wxString("OriginalWidth") +#define wxIMAGE_OPTION_ORIGINAL_HEIGHT wxString("OriginalHeight") + +#define wxIMAGE_OPTION_BMP_FORMAT wxString("wxBMP_FORMAT") +#define wxIMAGE_OPTION_CUR_HOTSPOT_X wxString("HotSpotX") +#define wxIMAGE_OPTION_CUR_HOTSPOT_Y wxString("HotSpotY") + +#define wxIMAGE_OPTION_GIF_COMMENT wxString("GifComment") + +#define wxIMAGE_OPTION_PNG_FORMAT wxString("PngFormat") +#define wxIMAGE_OPTION_PNG_BITDEPTH wxString("PngBitDepth") +#define wxIMAGE_OPTION_PNG_FILTER wxString("PngF") +#define wxIMAGE_OPTION_PNG_COMPRESSION_LEVEL wxString("PngZL") +#define wxIMAGE_OPTION_PNG_COMPRESSION_MEM_LEVEL wxString("PngZM") +#define wxIMAGE_OPTION_PNG_COMPRESSION_STRATEGY wxString("PngZS") +#define wxIMAGE_OPTION_PNG_COMPRESSION_BUFFER_SIZE wxString("PngZB") + +#define wxIMAGE_OPTION_TIFF_BITSPERSAMPLE wxString("BitsPerSample") +#define wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL wxString("SamplesPerPixel") +#define wxIMAGE_OPTION_TIFF_COMPRESSION wxString("Compression") +#define wxIMAGE_OPTION_TIFF_PHOTOMETRIC wxString("Photometric") +#define wxIMAGE_OPTION_TIFF_IMAGEDESCRIPTOR wxString("ImageDescriptor") + + +enum +{ + wxBMP_24BPP = 24, // default, do not need to set + //wxBMP_16BPP = 16, // wxQuantize can only do 236 colors? + wxBMP_8BPP = 8, // 8bpp, quantized colors + wxBMP_8BPP_GREY = 9, // 8bpp, rgb averaged to greys + wxBMP_8BPP_GRAY = wxBMP_8BPP_GREY, + wxBMP_8BPP_RED = 10, // 8bpp, red used as greyscale + wxBMP_8BPP_PALETTE = 11, // 8bpp, use the wxImage's palette + wxBMP_4BPP = 4, // 4bpp, quantized colors + wxBMP_1BPP = 1, // 1bpp, quantized "colors" + wxBMP_1BPP_BW = 2 // 1bpp, black & white from red +}; + + /** @class wxImageHandler @@ -284,6 +334,24 @@ public: @since 2.9.2 */ static wxVersionInfo GetLibraryVersionInfo(); + +protected: + /** + Called to get the number of images available in a multi-image file + type, if supported. + + NOTE: this function is allowed to change the current stream position + since GetImageCount() will take care of restoring it later + */ + virtual int DoGetImageCount( wxInputStream& stream ); + + /** + Called to test if this handler can read an image from the given stream. + + NOTE: this function is allowed to change the current stream position + since CallDoCanRead() will take care of restoring it later + */ + virtual bool DoCanRead( wxInputStream& stream ) = 0; }; @@ -299,6 +367,9 @@ const unsigned char wxIMAGE_ALPHA_TRANSPARENT = 0; */ const unsigned char wxIMAGE_ALPHA_OPAQUE = 0xff; +const unsigned char wxIMAGE_ALPHA_THRESHOLD = 0x80; + + /** @class wxImage @@ -346,8 +417,8 @@ const unsigned char wxIMAGE_ALPHA_OPAQUE = 0xff; handlers have full alpha channel support for loading so if you want to use alpha you have to use one of these formats. If you initialize the image alpha channel yourself using wxImage::SetAlpha, you should save it in - either PNG or TGA format to avoid losing it as these are the only handlers - that currently support saving with alpha. + either PNG, TGA, or TIFF format to avoid losing it as these are the only + handlers that currently support saving with alpha. @section image_handlers Available image handlers @@ -363,7 +434,7 @@ const unsigned char wxIMAGE_ALPHA_OPAQUE = 0xff; - wxGIFHandler: For loading and saving (see below). - wxPCXHandler: For loading and saving (see below). - wxPNMHandler: For loading and saving (see below). - - wxTIFFHandler: For loading (including alpha support) and saving. + - wxTIFFHandler: For loading and saving. Includes alpha support. - wxTGAHandler: For loading and saving. Includes alpha support. - wxIFFHandler: For loading only. - wxXPMHandler: For loading and saving. @@ -407,6 +478,10 @@ public: between HSV color space and RGB color space. */ RGBValue(unsigned char r=0, unsigned char g=0, unsigned char b=0); + + unsigned char red; + unsigned char green; + unsigned char blue; }; /** @@ -423,6 +498,10 @@ public: between HSV color space and RGB color space. */ HSVValue(double h=0.0, double s=0.0, double v=0.0); + + double hue; + double saturation; + double value; }; /** @@ -494,7 +573,7 @@ public: /** @overload */ - wxImage(const wxSize& sz, unsigned char* data, unsigned char* data, unsigned char* alpha, + wxImage(const wxSize& sz, unsigned char* data, unsigned char* alpha, bool static_data = false); /** @@ -1015,7 +1094,7 @@ public: This is most often used when doing direct image manipulation. The return value points to an array of characters in RGBRGBRGB... format in the top-to-bottom, left-to-right order, that is the first RGB triplet - corresponds to the pixel first pixel of the first row, the second one --- + corresponds to the first pixel of the first row, the second one --- to the second pixel of the first row and so on until the end of the first row, with second row following after it and so on. @@ -1125,6 +1204,12 @@ public: handler, this is still what happens however). These options must be set before calling LoadFile() to have any effect. + @li @c wxIMAGE_OPTION_ORIGINAL_WIDTH and @c wxIMAGE_OPTION_ORIGINAL_HEIGHT: + These options will return the original size of the image if either + @c wxIMAGE_OPTION_MAX_WIDTH or @c wxIMAGE_OPTION_MAX_HEIGHT is + specified. + @since 2.9.3 + @li @c wxIMAGE_OPTION_QUALITY: JPEG quality used when saving. This is an integer in 0..100 range with 0 meaning very poor and 100 excellent (but very badly compressed). This option is currently ignored for @@ -1270,7 +1355,7 @@ public: bool IsOk() const; /** - Returns @true if the given pixel is transparent, i.e. either has the mask + Returns @true if the given pixel is transparent, i.e.\ either has the mask colour if this image has a mask or if this image has alpha channel and alpha value of this pixel is strictly less than @a threshold. */ @@ -1829,6 +1914,30 @@ public: static wxImage::RGBValue HSVtoRGB(const wxImage::HSVValue& hsv); }; + +class wxImageHistogram : public wxImageHistogramBase +{ +public: + wxImageHistogram(); + + // get the key in the histogram for the given RGB values + static unsigned long MakeKey(unsigned char r, + unsigned char g, + unsigned char b); + + // find first colour that is not used in the image and has higher + // RGB values than RGB(startR, startG, startB) + // + // returns true and puts this colour in r, g, b (each of which may be NULL) + // on success or returns false if there are no more free colours + bool FindFirstUnusedColour(unsigned char *r, + unsigned char *g, + unsigned char *b, + unsigned char startR = 1, + unsigned char startG = 0, + unsigned char startB = 0 ) const; +}; + /** An instance of an empty image without an alpha channel. */