| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: image.h
- // Purpose: interface of wxImageHandler and wxImage
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- Possible values for the image resolution option.
- @see wxImage::GetOptionInt().
- */
- enum wxImageResolution
- {
- /// Resolution not specified.
- wxIMAGE_RESOLUTION_NONE = 0,
- /// Resolution specified in inches.
- wxIMAGE_RESOLUTION_INCHES = 1,
- /// Resolution specified in centimetres.
- wxIMAGE_RESOLUTION_CM = 2
- };
- /**
- Image resize algorithm.
- This is used with wxImage::Scale() and wxImage::Rescale().
- */
- enum wxImageResizeQuality
- {
- /// Simplest and fastest algorithm.
- wxIMAGE_QUALITY_NEAREST,
- /// Compromise between wxIMAGE_QUALITY_NEAREST and wxIMAGE_QUALITY_BICUBIC.
- wxIMAGE_QUALITY_BILINEAR,
- /// Highest quality but slowest execution time.
- wxIMAGE_QUALITY_BICUBIC,
- /**
- Use surrounding pixels to calculate an average that will be used for
- new pixels. This method is typically used when reducing the size of
- an image.
- */
- wxIMAGE_QUALITY_BOX_AVERAGE,
- /**
- Default image resizing algorithm used by wxImage::Scale(). Currently
- the same as wxIMAGE_QUALITY_NEAREST.
- */
- wxIMAGE_QUALITY_NORMAL,
- /**
- Best image resizing algorithm. Since version 2.9.2 this results in
- wxIMAGE_QUALITY_BOX_AVERAGE being used when reducing the size of the
- image (meaning that both the new width and height will be smaller than
- the original size). Otherwise wxIMAGE_QUALITY_BICUBIC is used.
- */
- wxIMAGE_QUALITY_HIGH
- };
- /**
- Possible values for PNG image type option.
- @see wxImage::GetOptionInt().
- */
- enum wxImagePNGType
- {
- wxPNG_TYPE_COLOUR = 0, ///< Colour PNG image.
- wxPNG_TYPE_GREY = 2, ///< Greyscale PNG image converted from RGB.
- wxPNG_TYPE_GREY_RED = 3, ///< Greyscale PNG image using red as grey.
- 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
- This is the base class for implementing image file loading/saving, and
- image creation from data.
- It is used within wxImage and is not normally seen by the application.
- If you wish to extend the capabilities of wxImage, derive a class from
- wxImageHandler and add the handler using wxImage::AddHandler in your
- application initialization.
- Note that all wxImageHandlers provided by wxWidgets are part of
- the @ref page_libs_wxcore library.
- For details about the default handlers, please see the section
- @ref image_handlers in the wxImage class documentation.
- @section imagehandler_note Note (Legal Issue)
- This software is based in part on the work of the Independent JPEG Group.
- (Applies when wxWidgets is linked with JPEG support.
- wxJPEGHandler uses libjpeg created by IJG.)
- @stdobjects
- ::wxNullImage
- @library{wxcore}
- @category{gdi}
- @see wxImage, wxInitAllImageHandlers()
- */
- class wxImageHandler : public wxObject
- {
- public:
- /**
- Default constructor.
- In your own default constructor, initialise the members
- m_name, m_extension and m_type.
- */
- wxImageHandler();
- /**
- Destroys the wxImageHandler object.
- */
- virtual ~wxImageHandler();
- /**
- Returns @true if this handler supports the image format contained in the
- given stream.
- This function doesn't modify the current stream position (because it
- restores the original position before returning; this however requires the
- stream to be seekable; see wxStreamBase::IsSeekable).
- */
- bool CanRead( wxInputStream& stream );
- /**
- Returns @true if this handler supports the image format contained in the
- file with the given name.
- This function doesn't modify the current stream position (because it
- restores the original position before returning; this however requires the
- stream to be seekable; see wxStreamBase::IsSeekable).
- */
- bool CanRead( const wxString& filename );
- /**
- Gets the preferred file extension associated with this handler.
- @see GetAltExtensions()
- */
- const wxString& GetExtension() const;
- /**
- Returns the other file extensions associated with this handler.
- The preferred extension for this handler is returned by GetExtension().
- @since 2.9.0
- */
- const wxArrayString& GetAltExtensions() const;
- /**
- If the image file contains more than one image and the image handler is capable
- of retrieving these individually, this function will return the number of
- available images.
- @param stream
- Opened input stream for reading image data.
- This function doesn't modify the current stream position (because it
- restores the original position before returning; this however requires the
- stream to be seekable; see wxStreamBase::IsSeekable).
- @return Number of available images. For most image handlers, this is 1
- (exceptions are TIFF and ICO formats as well as animated GIFs
- for which this function returns the number of frames in the
- animation).
- */
- virtual int GetImageCount(wxInputStream& stream);
- /**
- Gets the MIME type associated with this handler.
- */
- const wxString& GetMimeType() const;
- /**
- Gets the name of this handler.
- */
- const wxString& GetName() const;
- /**
- Gets the image type associated with this handler.
- */
- wxBitmapType GetType() const;
- /**
- Loads a image from a stream, putting the resulting data into @a image.
- If the image file contains more than one image and the image handler is
- capable of retrieving these individually, @a index indicates which image
- to read from the stream.
- @param image
- The image object which is to be affected by this operation.
- @param stream
- Opened input stream for reading image data.
- @param verbose
- If set to @true, errors reported by the image handler will produce
- wxLogMessages.
- @param index
- The index of the image in the file (starting from zero).
- @return @true if the operation succeeded, @false otherwise.
- @see wxImage::LoadFile, wxImage::SaveFile, SaveFile()
- */
- virtual bool LoadFile(wxImage* image, wxInputStream& stream,
- bool verbose = true, int index = -1);
- /**
- Saves a image in the output stream.
- @param image
- The image object which is to be affected by this operation.
- @param stream
- Opened output stream for writing the data.
- @param verbose
- If set to @true, errors reported by the image handler will produce
- wxLogMessages.
- @return @true if the operation succeeded, @false otherwise.
- @see wxImage::LoadFile, wxImage::SaveFile, LoadFile()
- */
- virtual bool SaveFile(wxImage* image, wxOutputStream& stream,
- bool verbose = true);
- /**
- Sets the preferred file extension associated with this handler.
- @param extension
- File extension without leading dot.
- @see SetAltExtensions()
- */
- void SetExtension(const wxString& extension);
- /**
- Sets the alternative file extensions associated with this handler.
- @param extensions
- Array of file extensions.
- @see SetExtension()
- @since 2.9.0
- */
- void SetAltExtensions(const wxArrayString& extensions);
- /**
- Sets the handler MIME type.
- @param mimetype
- Handler MIME type.
- */
- void SetMimeType(const wxString& mimetype);
- /**
- Sets the handler name.
- @param name
- Handler name.
- */
- void SetName(const wxString& name);
- /**
- Retrieve the version information about the image library used by this
- handler.
- This method is not present in wxImageHandler class itself but is
- present in a few of the classes deriving from it, currently
- wxJPEGHandler, wxPNGHandler and wxTIFFHandler. It returns the
- information about the version of the image library being used for the
- corresponding handler implementation.
- @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;
- };
- /**
- Constant used to indicate the alpha value conventionally defined as
- the complete transparency.
- */
- const unsigned char wxIMAGE_ALPHA_TRANSPARENT = 0;
- /**
- Constant used to indicate the alpha value conventionally defined as
- the complete opacity.
- */
- const unsigned char wxIMAGE_ALPHA_OPAQUE = 0xff;
- const unsigned char wxIMAGE_ALPHA_THRESHOLD = 0x80;
- /**
- @class wxImage
- This class encapsulates a platform-independent image.
- An image can be created from data, or using wxBitmap::ConvertToImage.
- An image can be loaded from a file in a variety of formats, and is extensible
- to new formats via image format handlers. Functions are available to set and
- get image bits, so it can be used for basic image manipulation.
- A wxImage cannot (currently) be drawn directly to a wxDC.
- Instead, a platform-specific wxBitmap object must be created from it using
- the wxBitmap::wxBitmap(wxImage,int depth) constructor.
- This bitmap can then be drawn in a device context, using wxDC::DrawBitmap.
- More on the difference between wxImage and wxBitmap: wxImage is just a
- buffer of RGB bytes with an optional buffer for the alpha bytes. It is all
- generic, platform independent and image file format independent code. It
- includes generic code for scaling, resizing, clipping, and other manipulations
- of the image data. OTOH, wxBitmap is intended to be a wrapper of whatever is
- the native image format that is quickest/easiest to draw to a DC or to be the
- target of the drawing operations performed on a wxMemoryDC. By splitting the
- responsibilities between wxImage/wxBitmap like this then it's easier to use
- generic code shared by all platforms and image types for generic operations and
- platform specific code where performance or compatibility is needed.
- One colour value of the image may be used as a mask colour which will lead to
- the automatic creation of a wxMask object associated to the bitmap object.
- @section image_alpha Alpha channel support
- Starting from wxWidgets 2.5.0 wxImage supports alpha channel data, that is
- in addition to a byte for the red, green and blue colour components for each
- pixel it also stores a byte representing the pixel opacity.
- An alpha value of 0 corresponds to a transparent pixel (null opacity) while
- a value of 255 means that the pixel is 100% opaque.
- The constants ::wxIMAGE_ALPHA_TRANSPARENT and ::wxIMAGE_ALPHA_OPAQUE can be
- used to indicate those values in a more readable form.
- While all images have RGB data, not all images have an alpha channel. Before
- using wxImage::GetAlpha you should check if this image contains an alpha
- channel with wxImage::HasAlpha. Currently the BMP, PNG, TGA, and TIFF format
- 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, 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
- The following image handlers are available.
- wxBMPHandler is always installed by default.
- To use other image formats, install the appropriate handler with
- wxImage::AddHandler or call ::wxInitAllImageHandlers().
- - wxBMPHandler: For loading (including alpha support) and saving, always installed.
- - wxPNGHandler: For loading and saving. Includes alpha support.
- - wxJPEGHandler: For loading and saving.
- - wxGIFHandler: For loading and saving (see below).
- - wxPCXHandler: For loading and saving (see below).
- - wxPNMHandler: For loading and saving (see below).
- - 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.
- - wxICOHandler: For loading and saving.
- - wxCURHandler: For loading and saving.
- - wxANIHandler: For loading only.
- When saving in PCX format, wxPCXHandler will count the number of different
- colours in the image; if there are 256 or less colours, it will save as 8 bit,
- else it will save as 24 bit.
- Loading PNMs only works for ASCII or raw RGB images.
- When saving in PNM format, wxPNMHandler will always save as raw RGB.
- Saving GIFs requires images of maximum 8 bpp (see wxQuantize), and the alpha channel converted to a mask (see wxImage::ConvertAlphaToMask).
- Saving an animated GIF requires images of the same size (see wxGIFHandler::SaveAnimation)
- @library{wxcore}
- @category{gdi}
- @stdobjects
- ::wxNullImage
- @see wxBitmap, wxInitAllImageHandlers(), wxPixelData
- */
- class wxImage : public wxObject
- {
- public:
- /**
- A simple class which stores red, green and blue values as 8 bit unsigned integers
- in the range of 0-255.
- */
- class RGBValue
- {
- public:
- /**
- Constructor for RGBValue, an object that contains values for red, green
- and blue which represent the value of a color.
- It is used by wxImage::HSVtoRGB and wxImage::RGBtoHSV, which convert
- 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;
- };
- /**
- A simple class which stores hue, saturation and value as doubles in the range 0.0-1.0.
- */
- class HSVValue
- {
- public:
- /**
- Constructor for HSVValue, an object that contains values for hue, saturation
- and value which represent the value of a color.
- It is used by wxImage::HSVtoRGB() and wxImage::RGBtoHSV(), which convert
- 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;
- };
- /**
- Creates an empty wxImage object without an alpha channel.
- */
- wxImage();
- /**
- Creates an image with the given size and clears it if requested.
- Does not create an alpha channel.
- @param width
- Specifies the width of the image.
- @param height
- Specifies the height of the image.
- @param clear
- If @true, initialize the image to black.
- */
- wxImage(int width, int height, bool clear = true);
- /**
- @overload
- */
- wxImage(const wxSize& sz, bool clear = true);
- /**
- Creates an image from data in memory. If @a static_data is @false
- then the wxImage will take ownership of the data and free it
- afterwards. For this, it has to be allocated with @e malloc.
- @param width
- Specifies the width of the image.
- @param height
- Specifies the height of the image.
- @param data
- A pointer to RGB data
- @param static_data
- Indicates if the data should be free'd after use
- */
- wxImage(int width, int height, unsigned char* data, bool static_data = false);
- /**
- @overload
- */
- wxImage(const wxSize& sz, unsigned char* data, bool static_data = false);
- /**
- Creates an image from data in memory. If @a static_data is @false
- then the wxImage will take ownership of the data and free it
- afterwards. For this, it has to be allocated with @e malloc.
- @param width
- Specifies the width of the image.
- @param height
- Specifies the height of the image.
- @param data
- A pointer to RGB data
- @param alpha
- A pointer to alpha-channel data
- @param static_data
- Indicates if the data should be free'd after use
- */
- wxImage(int width, int height, unsigned char* data, unsigned char* alpha,
- bool static_data = false );
- /**
- @overload
- */
- wxImage(const wxSize& sz, unsigned char* data, unsigned char* alpha,
- bool static_data = false);
- /**
- Creates an image from XPM data.
- @param xpmData
- A pointer to XPM image data.
- @beginWxPerlOnly
- Not supported by wxPerl.
- @endWxPerlOnly
- */
- wxImage(const char* const* xpmData);
- /**
- Creates an image from a file.
- @param name
- Name of the file from which to load the image.
- @param type
- May be one of the following:
- @li wxBITMAP_TYPE_BMP: Load a Windows bitmap file.
- @li wxBITMAP_TYPE_GIF: Load a GIF bitmap file.
- @li wxBITMAP_TYPE_JPEG: Load a JPEG bitmap file.
- @li wxBITMAP_TYPE_PNG: Load a PNG bitmap file.
- @li wxBITMAP_TYPE_PCX: Load a PCX bitmap file.
- @li wxBITMAP_TYPE_PNM: Load a PNM bitmap file.
- @li wxBITMAP_TYPE_TIFF: Load a TIFF bitmap file.
- @li wxBITMAP_TYPE_TGA: Load a TGA bitmap file.
- @li wxBITMAP_TYPE_XPM: Load a XPM bitmap file.
- @li wxBITMAP_TYPE_ICO: Load a Windows icon file (ICO).
- @li wxBITMAP_TYPE_CUR: Load a Windows cursor file (CUR).
- @li wxBITMAP_TYPE_ANI: Load a Windows animated cursor file (ANI).
- @li wxBITMAP_TYPE_ANY: Will try to autodetect the format.
- @param index
- Index of the image to load in the case that the image file contains
- multiple images. This is only used by GIF, ICO and TIFF handlers.
- The default value (-1) means "choose the default image" and is
- interpreted as the first image (index=0) by the GIF and TIFF handler
- and as the largest and most colourful one by the ICO handler.
- @remarks Depending on how wxWidgets has been configured and by which
- handlers have been loaded, not all formats may be available.
- Any handler other than BMP must be previously initialized with
- wxImage::AddHandler or wxInitAllImageHandlers.
- @note
- You can use GetOptionInt() to get the hotspot when loading cursor files:
- @code
- int hotspot_x = image.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_X);
- int hotspot_y = image.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_Y);
- @endcode
- @see LoadFile()
- */
- wxImage(const wxString& name, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1);
- /**
- Creates an image from a file using MIME-types to specify the type.
- @param name
- Name of the file from which to load the image.
- @param mimetype
- MIME type string (for example 'image/jpeg')
- @param index
- See description in wxImage(const wxString&, wxBitmapType, int) overload.
- */
- wxImage(const wxString& name, const wxString& mimetype, int index = -1);
- /**
- Creates an image from a stream.
- @param stream
- Opened input stream from which to load the image. Currently,
- the stream must support seeking.
- @param type
- See description in wxImage(const wxString&, wxBitmapType, int) overload.
- @param index
- See description in wxImage(const wxString&, wxBitmapType, int) overload.
- */
- wxImage(wxInputStream& stream, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1);
- /**
- Creates an image from a stream using MIME-types to specify the type.
- @param stream
- Opened input stream from which to load the image. Currently,
- the stream must support seeking.
- @param mimetype
- MIME type string (for example 'image/jpeg')
- @param index
- See description in wxImage(const wxString&, wxBitmapType, int) overload.
- */
- wxImage(wxInputStream& stream, const wxString& mimetype, int index = -1);
- /**
- Destructor.
- See @ref overview_refcount_destruct "reference-counted object destruction"
- for more info.
- */
- virtual ~wxImage();
- /**
- @name Image creation, initialization and deletion functions
- */
- //@{
- /**
- Returns an identical copy of this image.
- */
- wxImage Copy() const;
- /**
- Creates a fresh image.
- See wxImage::wxImage(int,int,bool) for more info.
- @return @true if the call succeeded, @false otherwise.
- */
- bool Create(int width, int height, bool clear = true);
- /**
- @overload
- */
- bool Create( const wxSize& sz, bool clear = true );
- /**
- Creates a fresh image.
- See wxImage::wxImage(int,int,unsigned char*,bool) for more info.
- @return @true if the call succeeded, @false otherwise.
- */
- bool Create( int width, int height, unsigned char* data, bool static_data = false );
- /**
- @overload
- */
- bool Create( const wxSize& sz, unsigned char* data, bool static_data = false );
- /**
- Creates a fresh image.
- See wxImage::wxImage(int,int,unsigned char*,unsigned char*,bool) for more info.
- @return @true if the call succeeded, @false otherwise.
- */
- bool Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false );
- /**
- @overload
- */
- bool Create( const wxSize& sz, unsigned char* data, unsigned char* alpha, bool static_data = false );
- /**
- Initialize the image data with zeroes (the default) or with the
- byte value given as @a value.
- @since 2.9.0
- */
- void Clear(unsigned char value = 0);
- /**
- Destroys the image data.
- */
- void Destroy();
- /**
- Initializes the image alpha channel data.
- It is an error to call it if the image already has alpha data.
- If it doesn't, alpha data will be by default initialized to all pixels
- being fully opaque. But if the image has a mask colour, all mask pixels
- will be completely transparent.
- */
- void InitAlpha();
- //@}
- /**
- @name Image manipulation functions
- */
- //@{
- /**
- Blurs the image in both horizontal and vertical directions by the
- specified pixel @a blurRadius. This should not be used when using
- a single mask colour for transparency.
- @see BlurHorizontal(), BlurVertical()
- */
- wxImage Blur(int blurRadius) const;
- /**
- Blurs the image in the horizontal direction only. This should not be used
- when using a single mask colour for transparency.
- @see Blur(), BlurVertical()
- */
- wxImage BlurHorizontal(int blurRadius) const;
- /**
- Blurs the image in the vertical direction only. This should not be used
- when using a single mask colour for transparency.
- @see Blur(), BlurHorizontal()
- */
- wxImage BlurVertical(int blurRadius) const;
- /**
- Returns a mirrored copy of the image.
- The parameter @a horizontally indicates the orientation.
- */
- wxImage Mirror(bool horizontally = true) const;
- /**
- Copy the data of the given @a image to the specified position in this image.
- */
- void Paste(const wxImage& image, int x, int y);
- /**
- Replaces the colour specified by @e r1,g1,b1 by the colour @e r2,g2,b2.
- */
- void Replace(unsigned char r1, unsigned char g1,
- unsigned char b1, unsigned char r2,
- unsigned char g2, unsigned char b2);
- /**
- Changes the size of the image in-place by scaling it: after a call to this
- function,the image will have the given width and height.
- For a description of the @a quality parameter, see the Scale() function.
- Returns the (modified) image itself.
- @see Scale()
- */
- wxImage& Rescale(int width, int height,
- wxImageResizeQuality quality = wxIMAGE_QUALITY_NORMAL);
- /**
- Changes the size of the image in-place without scaling it by adding either a
- border with the given colour or cropping as necessary.
- The image is pasted into a new image with the given @a size and background
- colour at the position @a pos relative to the upper left of the new image.
- If @a red = green = blue = -1 then use either the current mask colour
- if set or find, use, and set a suitable mask colour for any newly exposed
- areas.
- @return The (modified) image itself.
- @see Size()
- */
- wxImage& Resize(const wxSize& size, const wxPoint& pos, int red = -1,
- int green = -1, int blue = -1);
- /**
- Rotates the image about the given point, by @a angle radians.
- Passing @true to @a interpolating results in better image quality, but is slower.
- If the image has a mask, then the mask colour is used for the uncovered
- pixels in the rotated image background. Else, black (rgb 0, 0, 0) will be used.
- Returns the rotated image, leaving this image intact.
- */
- wxImage Rotate(double angle, const wxPoint& rotationCentre,
- bool interpolating = true,
- wxPoint* offsetAfterRotation = NULL) const;
- /**
- Returns a copy of the image rotated 90 degrees in the direction
- indicated by @a clockwise.
- */
- wxImage Rotate90(bool clockwise = true) const;
- /**
- Returns a copy of the image rotated by 180 degrees.
- @since 2.9.2
- */
- wxImage Rotate180() const;
- /**
- Rotates the hue of each pixel in the image by @e angle, which is a double in
- the range of -1.0 to +1.0, where -1.0 corresponds to -360 degrees and +1.0
- corresponds to +360 degrees.
- */
- void RotateHue(double angle);
- /**
- Returns a scaled version of the image.
- This is also useful for scaling bitmaps in general as the only other way
- to scale bitmaps is to blit a wxMemoryDC into another wxMemoryDC.
- The parameter @a quality determines what method to use for resampling
- the image, see wxImageResizeQuality documentation.
- It should be noted that although using @c wxIMAGE_QUALITY_HIGH produces much nicer
- looking results it is a slower method. Downsampling will use the box averaging
- method which seems to operate very fast. If you are upsampling larger images using
- this method you will most likely notice that it is a bit slower and in extreme
- cases it will be quite substantially slower as the bicubic algorithm has to process a
- lot of data.
- It should also be noted that the high quality scaling may not work as expected
- when using a single mask colour for transparency, as the scaling will blur the
- image and will therefore remove the mask partially. Using the alpha channel
- will work.
- Example:
- @code
- // get the bitmap from somewhere
- wxBitmap bmp = ...;
- // rescale it to have size of 32*32
- if ( bmp.GetWidth() != 32 || bmp.GetHeight() != 32 )
- {
- wxImage image = bmp.ConvertToImage();
- bmp = wxBitmap(image.Scale(32, 32));
- // another possibility:
- image.Rescale(32, 32);
- bmp = image;
- }
- @endcode
- @see Rescale()
- */
- wxImage Scale(int width, int height,
- wxImageResizeQuality quality = wxIMAGE_QUALITY_NORMAL) const;
- /**
- Returns a resized version of this image without scaling it by adding either a
- border with the given colour or cropping as necessary.
- The image is pasted into a new image with the given @a size and background
- colour at the position @a pos relative to the upper left of the new image.
- If @a red = green = blue = -1 then the areas of the larger image not covered
- by this image are made transparent by filling them with the image mask colour
- (which will be allocated automatically if it isn't currently set).
- Otherwise, the areas will be filled with the colour with the specified RGB components.
- @see Resize()
- */
- wxImage Size(const wxSize& size, const wxPoint& pos, int red = -1,
- int green = -1, int blue = -1) const;
- //@}
- /**
- @name Conversion functions
- */
- //@{
- /**
- If the image has alpha channel, this method converts it to mask.
- If the image has an alpha channel, all pixels with alpha value less
- than @a threshold are replaced with the mask colour and the alpha
- channel is removed. Otherwise nothing is done.
- The mask colour is chosen automatically using
- FindFirstUnusedColour() by this function, see the overload below if you
- this is not appropriate.
- @return Returns @true on success, @false on error.
- */
- bool ConvertAlphaToMask(unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD);
- /**
- If the image has alpha channel, this method converts it to mask using
- the specified colour as the mask colour.
- If the image has an alpha channel, all pixels with alpha value less
- than @a threshold are replaced with the mask colour and the alpha
- channel is removed. Otherwise nothing is done.
- @since 2.9.0
- @param mr
- The red component of the mask colour.
- @param mg
- The green component of the mask colour.
- @param mb
- The blue component of the mask colour.
- @param threshold
- Pixels with alpha channel values below the given threshold are
- considered to be transparent, i.e. the corresponding mask pixels
- are set. Pixels with the alpha values above the threshold are
- considered to be opaque.
- @return Returns @true on success, @false on error.
- */
- bool ConvertAlphaToMask(unsigned char mr, unsigned char mg, unsigned char mb,
- unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD);
- /**
- Returns a greyscale version of the image.
- The returned image uses the luminance component of the original to
- calculate the greyscale. Defaults to using the standard ITU-T BT.601
- when converting to YUV, where every pixel equals
- (R * @a weight_r) + (G * @a weight_g) + (B * @a weight_b).
- */
- wxImage ConvertToGreyscale(double weight_r, double weight_g, double weight_b) const;
- /**
- Returns a greyscale version of the image.
- @since 2.9.0
- */
- wxImage ConvertToGreyscale() const;
- /**
- Returns monochromatic version of the image.
- The returned image has white colour where the original has @e (r,g,b)
- colour and black colour everywhere else.
- */
- wxImage ConvertToMono(unsigned char r, unsigned char g, unsigned char b) const;
- /**
- Returns disabled (dimmed) version of the image.
- @since 2.9.0
- */
- wxImage ConvertToDisabled(unsigned char brightness = 255) const;
- //@}
- /**
- @name Miscellaneous functions
- */
- //@{
- /**
- Computes the histogram of the image. @a histogram is a reference to
- wxImageHistogram object. wxImageHistogram is a specialization of
- wxHashMap "template" and is defined as follows:
- @code
- class WXDLLEXPORT wxImageHistogramEntry
- {
- public:
- wxImageHistogramEntry() : index(0), value(0) {}
- unsigned long index;
- unsigned long value;
- };
- WX_DECLARE_EXPORTED_HASH_MAP(unsigned long, wxImageHistogramEntry,
- wxIntegerHash, wxIntegerEqual,
- wxImageHistogram);
- @endcode
- @return Returns number of colours in the histogram.
- */
- unsigned long ComputeHistogram(wxImageHistogram& histogram) const;
- /**
- Finds the first colour that is never used in the image.
- The search begins at given initial colour and continues by increasing
- R, G and B components (in this order) by 1 until an unused colour is
- found or the colour space exhausted.
- The parameters @a r, @a g, @a b are pointers to variables to save the colour.
- The parameters @a startR, @a startG, @a startB define the initial values
- of the colour.
- The returned colour will have RGB values equal to or greater than these.
- @return Returns @false if there is no unused colour left, @true on success.
- @note
- This method involves computing the histogram, which is a
- computationally intensive operation.
- */
- bool FindFirstUnusedColour(unsigned char* r, unsigned char* g,
- unsigned char* b, unsigned char startR = 1,
- unsigned char startG = 0,
- unsigned char startB = 0) const;
- /**
- Assignment operator, using @ref overview_refcount "reference counting".
- @param image
- Image to assign.
- @return Returns 'this' object.
- */
- wxImage& operator=(const wxImage& image);
- //@}
- /**
- @name Getters
- */
- //@{
- /**
- Returns pointer to the array storing the alpha values for this image.
- This pointer is @NULL for the images without the alpha channel. If the image
- does have it, this pointer may be used to directly manipulate the alpha values
- which are stored as the RGB ones.
- */
- unsigned char* GetAlpha() const;
- /**
- Returns the image data as an array.
- 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 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.
- You should not delete the returned pointer nor pass it to SetData().
- */
- unsigned char* GetData() const;
- /**
- Return alpha value at given pixel location.
- */
- unsigned char GetAlpha(int x, int y) const;
- /**
- Returns the red intensity at the given coordinate.
- */
- unsigned char GetRed(int x, int y) const;
- /**
- Returns the green intensity at the given coordinate.
- */
- unsigned char GetGreen(int x, int y) const;
- /**
- Returns the blue intensity at the given coordinate.
- */
- unsigned char GetBlue(int x, int y) const;
- /**
- Gets the red value of the mask colour.
- */
- unsigned char GetMaskRed() const;
- /**
- Gets the green value of the mask colour.
- */
- unsigned char GetMaskGreen() const;
- /**
- Gets the blue value of the mask colour.
- */
- unsigned char GetMaskBlue() const;
- /**
- Gets the width of the image in pixels.
- @see GetHeight(), GetSize()
- */
- int GetWidth() const;
- /**
- Gets the height of the image in pixels.
- @see GetWidth(), GetSize()
- */
- int GetHeight() const;
- /**
- Returns the size of the image in pixels.
- @since 2.9.0
- @see GetHeight(), GetWidth()
- */
- wxSize GetSize() const;
- /**
- Gets a user-defined string-valued option.
- Generic options:
- @li @c wxIMAGE_OPTION_FILENAME: The name of the file from which the image
- was loaded.
- Options specific to wxGIFHandler:
- @li @c wxIMAGE_OPTION_GIF_COMMENT: The comment text that is read from
- or written to the GIF file. In an animated GIF each frame can have
- its own comment. If there is only a comment in the first frame of
- a GIF it will not be repeated in other frames.
- @param name
- The name of the option, case-insensitive.
- @return
- The value of the option or an empty string if not found. Use
- HasOption() if an empty string can be a valid option value.
- @see SetOption(), GetOptionInt(), HasOption()
- */
- wxString GetOption(const wxString& name) const;
- /**
- Gets a user-defined integer-valued option.
- The function is case-insensitive to @a name.
- If the given option is not present, the function returns 0.
- Use HasOption() if 0 is a possibly valid value for the option.
- Generic options:
- @li @c wxIMAGE_OPTION_MAX_WIDTH and @c wxIMAGE_OPTION_MAX_HEIGHT: If either
- of these options is specified, the loaded image will be scaled down
- (preserving its aspect ratio) so that its width is less than the
- max width given if it is not 0 @em and its height is less than the
- max height given if it is not 0. This is typically used for loading
- thumbnails and the advantage of using these options compared to
- calling Rescale() after loading is that some handlers (only JPEG
- one right now) support rescaling the image during loading which is
- vastly more efficient than loading the entire huge image and
- rescaling it later (if these options are not supported by the
- 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
- the other formats.
- @li @c wxIMAGE_OPTION_RESOLUTIONUNIT: The value of this option determines
- whether the resolution of the image is specified in centimetres or
- inches, see wxImageResolution enum elements.
- @li @c wxIMAGE_OPTION_RESOLUTION, @c wxIMAGE_OPTION_RESOLUTIONX and
- @c wxIMAGE_OPTION_RESOLUTIONY: These options define the resolution of
- the image in the units corresponding to @c wxIMAGE_OPTION_RESOLUTIONUNIT
- options value. The first option can be set before saving the image
- to set both horizontal and vertical resolution to the same value.
- The X and Y options are set by the image handlers if they support
- the image resolution (currently BMP, JPEG and TIFF handlers do) and
- the image provides the resolution information and can be queried
- after loading the image.
- Options specific to wxPNGHandler:
- @li @c wxIMAGE_OPTION_PNG_FORMAT: Format for saving a PNG file, see
- wxImagePNGType for the supported values.
- @li @c wxIMAGE_OPTION_PNG_BITDEPTH: Bit depth for every channel (R/G/B/A).
- @li @c wxIMAGE_OPTION_PNG_FILTER: Filter for saving a PNG file, see libpng
- (http://www.libpng.org/pub/png/libpng-1.2.5-manual.html) for possible values
- (e.g. PNG_FILTER_NONE, PNG_FILTER_SUB, PNG_FILTER_UP, etc).
- @li @c wxIMAGE_OPTION_PNG_COMPRESSION_LEVEL: Compression level (0..9) for
- saving a PNG file. An high value creates smaller-but-slower PNG file.
- Note that unlike other formats (e.g. JPEG) the PNG format is always
- lossless and thus this compression level doesn't tradeoff the image
- quality.
- @li @c wxIMAGE_OPTION_PNG_COMPRESSION_MEM_LEVEL: Compression memory usage
- level (1..9) for saving a PNG file. An high value means the saving
- process consumes more memory, but may create smaller PNG file.
- @li @c wxIMAGE_OPTION_PNG_COMPRESSION_STRATEGY: Possible values are 0 for
- default strategy, 1 for filter, and 2 for Huffman-only.
- You can use OptiPNG (http://optipng.sourceforge.net/) to get a suitable
- value for your application.
- @li @c wxIMAGE_OPTION_PNG_COMPRESSION_BUFFER_SIZE: Internal buffer size
- (in bytes) for saving a PNG file. Ideally this should be as big as
- the resulting PNG file. Use this option if your application produces
- images with small size variation.
- Options specific to wxTIFFHandler:
- @li @c wxIMAGE_OPTION_TIFF_BITSPERSAMPLE: Number of bits per
- sample (channel). Currently values of 1 and 8 are supported. A
- value of 1 results in a black and white image. A value of 8 (the
- default) can mean greyscale or RGB, depending on the value of
- @c wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL.
- @li @c wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL: Number of samples
- (channels) per pixel. Currently values of 1 and 3 are supported.
- A value of 1 results in either a greyscale (by default) or black and
- white image, depending on the value of
- @c wxIMAGE_OPTION_TIFF_BITSPERSAMPLE. A value of 3 (the default)
- will result in an RGB image.
- @li @c wxIMAGE_OPTION_TIFF_COMPRESSION: Compression type. By default
- it is set to 1 (COMPRESSION_NONE). Typical other values are
- 5 (COMPRESSION_LZW) and 7 (COMPRESSION_JPEG). See tiff.h for more
- options.
- @li @c wxIMAGE_OPTION_TIFF_PHOTOMETRIC: Specifies the photometric
- interpretation. By default it is set to 2 (PHOTOMETRIC_RGB) for RGB
- images and 0 (PHOTOMETRIC_MINISWHITE) for greyscale or black and
- white images. It can also be set to 1 (PHOTOMETRIC_MINISBLACK) to
- treat the lowest value as black and highest as white.
- If you want a greyscale image it is also sufficient to only specify
- @c wxIMAGE_OPTION_TIFF_PHOTOMETRIC and set it to either
- PHOTOMETRIC_MINISWHITE or PHOTOMETRIC_MINISBLACK. The other values
- are taken care of.
- @note
- Be careful when combining the options @c wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL,
- @c wxIMAGE_OPTION_TIFF_BITSPERSAMPLE, and @c wxIMAGE_OPTION_TIFF_PHOTOMETRIC.
- While some measures are taken to prevent illegal combinations and/or
- values, it is still easy to abuse them and come up with invalid
- results in the form of either corrupted images or crashes.
- @param name
- The name of the option, case-insensitive.
- @return
- The value of the option or 0 if not found.
- Use HasOption() if 0 can be a valid option value.
- @see SetOption(), GetOption()
- */
- int GetOptionInt(const wxString& name) const;
- /**
- Get the current mask colour or find a suitable unused colour that could be
- used as a mask colour. Returns @true if the image currently has a mask.
- */
- bool GetOrFindMaskColour(unsigned char* r, unsigned char* g,
- unsigned char* b) const;
- /**
- Returns the palette associated with the image.
- Currently the palette is only used when converting to wxBitmap under Windows.
- Some of the wxImage handlers have been modified to set the palette if
- one exists in the image file (usually 256 or less colour images in
- GIF or PNG format).
- */
- const wxPalette& GetPalette() const;
- /**
- Returns a sub image of the current one as long as the rect belongs entirely
- to the image.
- */
- wxImage GetSubImage(const wxRect& rect) const;
- /**
- Gets the type of image found by LoadFile() or specified with SaveFile().
- @since 2.9.0
- */
- wxBitmapType GetType() const;
- /**
- Returns @true if this image has alpha channel, @false otherwise.
- @see GetAlpha(), SetAlpha()
- */
- bool HasAlpha() const;
- /**
- Returns @true if there is a mask active, @false otherwise.
- */
- bool HasMask() const;
- /**
- Returns @true if the given option is present.
- The function is case-insensitive to @a name.
- The lists of the currently supported options are in GetOption() and
- GetOptionInt() function docs.
- @see SetOption(), GetOption(), GetOptionInt()
- */
- bool HasOption(const wxString& name) const;
- /**
- Returns @true if image data is present.
- */
- bool IsOk() const;
- /**
- 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.
- */
- bool IsTransparent(int x, int y,
- unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD) const;
- //@}
- /**
- @name Loading and saving functions
- */
- //@{
- /**
- Loads an image from an input stream.
- @param stream
- Opened input stream from which to load the image.
- Currently, the stream must support seeking.
- @param type
- May be one of the following:
- @li wxBITMAP_TYPE_BMP: Load a Windows bitmap file.
- @li wxBITMAP_TYPE_GIF: Load a GIF bitmap file.
- @li wxBITMAP_TYPE_JPEG: Load a JPEG bitmap file.
- @li wxBITMAP_TYPE_PNG: Load a PNG bitmap file.
- @li wxBITMAP_TYPE_PCX: Load a PCX bitmap file.
- @li wxBITMAP_TYPE_PNM: Load a PNM bitmap file.
- @li wxBITMAP_TYPE_TIFF: Load a TIFF bitmap file.
- @li wxBITMAP_TYPE_TGA: Load a TGA bitmap file.
- @li wxBITMAP_TYPE_XPM: Load a XPM bitmap file.
- @li wxBITMAP_TYPE_ICO: Load a Windows icon file (ICO).
- @li wxBITMAP_TYPE_CUR: Load a Windows cursor file (CUR).
- @li wxBITMAP_TYPE_ANI: Load a Windows animated cursor file (ANI).
- @li wxBITMAP_TYPE_ANY: Will try to autodetect the format.
- @param index
- Index of the image to load in the case that the image file contains
- multiple images. This is only used by GIF, ICO and TIFF handlers.
- The default value (-1) means "choose the default image" and is
- interpreted as the first image (index=0) by the GIF and TIFF handler
- and as the largest and most colourful one by the ICO handler.
- @return @true if the operation succeeded, @false otherwise.
- If the optional index parameter is out of range, @false is
- returned and a call to wxLogError() takes place.
- @remarks Depending on how wxWidgets has been configured, not all formats
- may be available.
- @note
- You can use GetOptionInt() to get the hotspot when loading cursor files:
- @code
- int hotspot_x = image.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_X);
- int hotspot_y = image.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_Y);
- @endcode
- @see SaveFile()
- */
- virtual bool LoadFile(wxInputStream& stream,
- wxBitmapType type = wxBITMAP_TYPE_ANY,
- int index = -1);
- /**
- Loads an image from a file.
- If no handler type is provided, the library will try to autodetect the format.
- @param name
- Name of the file from which to load the image.
- @param type
- See the description in the LoadFile(wxInputStream&, wxBitmapType, int) overload.
- @param index
- See the description in the LoadFile(wxInputStream&, wxBitmapType, int) overload.
- */
- virtual bool LoadFile(const wxString& name,
- wxBitmapType type = wxBITMAP_TYPE_ANY,
- int index = -1);
- /**
- Loads an image from a file.
- If no handler type is provided, the library will try to autodetect the format.
- @param name
- Name of the file from which to load the image.
- @param mimetype
- MIME type string (for example 'image/jpeg')
- @param index
- See the description in the LoadFile(wxInputStream&, wxBitmapType, int) overload.
- */
- virtual bool LoadFile(const wxString& name, const wxString& mimetype,
- int index = -1);
- /**
- Loads an image from an input stream.
- @param stream
- Opened input stream from which to load the image.
- Currently, the stream must support seeking.
- @param mimetype
- MIME type string (for example 'image/jpeg')
- @param index
- See the description in the LoadFile(wxInputStream&, wxBitmapType, int) overload.
- */
- virtual bool LoadFile(wxInputStream& stream, const wxString& mimetype,
- int index = -1);
- /**
- Saves an image in the given stream.
- @param stream
- Opened output stream to save the image to.
- @param mimetype
- MIME type.
- @return @true if the operation succeeded, @false otherwise.
- @remarks Depending on how wxWidgets has been configured, not all formats
- may be available.
- @note
- You can use SetOption() to set the hotspot when saving an image
- into a cursor file (default hotspot is in the centre of the image):
- @code
- image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, hotspotX);
- image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, hotspotY);
- @endcode
- @see LoadFile()
- */
- virtual bool SaveFile(wxOutputStream& stream,
- const wxString& mimetype) const;
- /**
- Saves an image in the named file.
- @param name
- Name of the file to save the image to.
- @param type
- Currently these types can be used:
- @li wxBITMAP_TYPE_BMP: Save a BMP image file.
- @li wxBITMAP_TYPE_JPEG: Save a JPEG image file.
- @li wxBITMAP_TYPE_PNG: Save a PNG image file.
- @li wxBITMAP_TYPE_PCX: Save a PCX image file
- (tries to save as 8-bit if possible, falls back to 24-bit otherwise).
- @li wxBITMAP_TYPE_PNM: Save a PNM image file (as raw RGB always).
- @li wxBITMAP_TYPE_TIFF: Save a TIFF image file.
- @li wxBITMAP_TYPE_XPM: Save a XPM image file.
- @li wxBITMAP_TYPE_ICO: Save a Windows icon file (ICO).
- The size may be up to 255 wide by 127 high. A single image is saved
- in 8 colors at the size supplied.
- @li wxBITMAP_TYPE_CUR: Save a Windows cursor file (CUR).
- */
- virtual bool SaveFile(const wxString& name, wxBitmapType type) const;
- /**
- Saves an image in the named file.
- @param name
- Name of the file to save the image to.
- @param mimetype
- MIME type.
- */
- virtual bool SaveFile(const wxString& name, const wxString& mimetype) const;
- /**
- Saves an image in the named file.
- File type is determined from the extension of the file name.
- Note that this function may fail if the extension is not recognized!
- You can use one of the forms above to save images to files with
- non-standard extensions.
- @param name
- Name of the file to save the image to.
- */
- virtual bool SaveFile(const wxString& name) const;
- /**
- Saves an image in the given stream.
- @param stream
- Opened output stream to save the image to.
- @param type
- MIME type.
- */
- virtual bool SaveFile(wxOutputStream& stream, wxBitmapType type) const;
- //@}
- /**
- @name Setters
- */
- //@{
- /**
- This function is similar to SetData() and has similar restrictions.
- The pointer passed to it may however be @NULL in which case the function
- will allocate the alpha array internally -- this is useful to add alpha
- channel data to an image which doesn't have any.
- If the pointer is not @NULL, it must have one byte for each image pixel
- and be allocated with malloc().
- wxImage takes ownership of the pointer and will free it unless @a static_data
- parameter is set to @true -- in this case the caller should do it.
- */
- void SetAlpha(unsigned char* alpha = NULL,
- bool static_data = false);
- /**
- Sets the alpha value for the given pixel.
- This function should only be called if the image has alpha channel data,
- use HasAlpha() to check for this.
- */
- void SetAlpha(int x, int y, unsigned char alpha);
- /**
- Removes the alpha channel from the image.
- This function should only be called if the image has alpha channel data,
- use HasAlpha() to check for this.
- @since 2.9.1
- */
- void ClearAlpha();
- /**
- Sets the image data without performing checks.
- The data given must have the size (width*height*3) or results will be
- unexpected. Don't use this method if you aren't sure you know what you
- are doing.
- The data must have been allocated with @c malloc(), @b NOT with
- @c operator new.
- If @a static_data is @false, after this call the pointer to the data is
- owned by the wxImage object, that will be responsible for deleting it.
- Do not pass to this function a pointer obtained through GetData().
- */
- void SetData(unsigned char* data, bool static_data = false);
- /**
- @overload
- */
- void SetData(unsigned char* data, int new_width, int new_height,
- bool static_data = false);
- /**
- Specifies whether there is a mask or not.
- The area of the mask is determined by the current mask colour.
- */
- void SetMask(bool hasMask = true);
- /**
- Sets the mask colour for this image (and tells the image to use the mask).
- */
- void SetMaskColour(unsigned char red, unsigned char green,
- unsigned char blue);
- /**
- Sets image's mask so that the pixels that have RGB value of mr,mg,mb in
- mask will be masked in the image.
- This is done by first finding an unused colour in the image, setting
- this colour as the mask colour and then using this colour to draw all
- pixels in the image who corresponding pixel in mask has given RGB value.
- The parameter @a mask is the mask image to extract mask shape from.
- It must have the same dimensions as the image.
- The parameters @a mr, @a mg, @a mb are the RGB values of the pixels in
- mask that will be used to create the mask.
- @return Returns @false if mask does not have same dimensions as the image
- or if there is no unused colour left. Returns @true if the mask
- was successfully applied.
- @note
- Note that this method involves computing the histogram, which is a
- computationally intensive operation.
- */
- bool SetMaskFromImage(const wxImage& mask, unsigned char mr,
- unsigned char mg,
- unsigned char mb);
- /**
- Sets a user-defined option. The function is case-insensitive to @a name.
- For example, when saving as a JPEG file, the option @b quality is
- used, which is a number between 0 and 100 (0 is terrible, 100 is very good).
- The lists of the currently supported options are in GetOption() and
- GetOptionInt() function docs.
- @see GetOption(), GetOptionInt(), HasOption()
- */
- void SetOption(const wxString& name, const wxString& value);
- /**
- @overload
- */
- void SetOption(const wxString& name, int value);
- /**
- Associates a palette with the image.
- The palette may be used when converting wxImage to wxBitmap (MSW only at present)
- or in file save operations (none as yet).
- */
- void SetPalette(const wxPalette& palette);
- /**
- Set the color of the pixel at the given x and y coordinate.
- */
-
- void SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b );
- /**
- Sets the colour of the pixels within the given rectangle.
- This routine performs bounds-checks for the coordinate so it can be considered
- a safe way to manipulate the data.
- */
- void SetRGB(const wxRect& rect,
- unsigned char red,
- unsigned char green,
- unsigned char blue);
- /**
- Set the type of image returned by GetType().
- This method is mostly used internally by the library but can also be
- called from the user code if the image was created from data in the
- given bitmap format without using LoadFile() (which would set the type
- correctly automatically).
- Notice that the image must be created before this function is called.
- @since 2.9.0
- @param type
- One of bitmap type constants, @c wxBITMAP_TYPE_INVALID is a valid
- value for it and can be used to reset the bitmap type to default
- but @c wxBITMAP_TYPE_MAX is not allowed here.
- */
- void SetType(wxBitmapType type);
- //@}
- /**
- @name Handler management functions
- */
- //@{
- /**
- Register an image handler.
- Typical example of use:
- @code
- wxImage::AddHandler(new wxPNGHandler);
- @endcode
- See @ref image_handlers for a list of the available handlers. You can
- also use ::wxInitAllImageHandlers() to add handlers for all the image
- formats supported by wxWidgets at once.
- @param handler
- A heap-allocated handler object which will be deleted by wxImage
- if it is removed later by RemoveHandler() or at program shutdown.
- */
- static void AddHandler(wxImageHandler* handler);
- /**
- Deletes all image handlers.
- This function is called by wxWidgets on exit.
- */
- static void CleanUpHandlers();
- /**
- Finds the handler with the given name.
- @param name
- The handler name.
- @return A pointer to the handler if found, @NULL otherwise.
- @see wxImageHandler
- */
- static wxImageHandler* FindHandler(const wxString& name);
- /**
- Finds the handler associated with the given extension and type.
- @param extension
- The file extension, such as "bmp".
- @param imageType
- The image type; one of the ::wxBitmapType values.
- @return A pointer to the handler if found, @NULL otherwise.
- @see wxImageHandler
- */
- static wxImageHandler* FindHandler(const wxString& extension,
- wxBitmapType imageType);
- /**
- Finds the handler associated with the given image type.
- @param imageType
- The image type; one of the ::wxBitmapType values.
- @return A pointer to the handler if found, @NULL otherwise.
- @see wxImageHandler
- */
- static wxImageHandler* FindHandler(wxBitmapType imageType);
- /**
- Finds the handler associated with the given MIME type.
- @param mimetype
- MIME type.
- @return A pointer to the handler if found, @NULL otherwise.
- @see wxImageHandler
- */
- static wxImageHandler* FindHandlerMime(const wxString& mimetype);
- /**
- Returns the static list of image format handlers.
- @see wxImageHandler
- */
- static wxList& GetHandlers();
- /**
- Internal use only. Adds standard image format handlers.
- It only install wxBMPHandler for the time being, which is used by wxBitmap.
- This function is called by wxWidgets on startup, and shouldn't be called by
- the user.
- @see wxImageHandler, wxInitAllImageHandlers(), wxQuantize
- */
- static void InitStandardHandlers();
- /**
- Adds a handler at the start of the static list of format handlers.
- @param handler
- A new image format handler object. There is usually only one instance
- of a given handler class in an application session.
- @see wxImageHandler
- */
- static void InsertHandler(wxImageHandler* handler);
- /**
- Finds the handler with the given name, and removes it.
- The handler is also deleted.
- @param name
- The handler name.
- @return @true if the handler was found and removed, @false otherwise.
- @see wxImageHandler
- */
- static bool RemoveHandler(const wxString& name);
- //@}
- /**
- Returns @true if at least one of the available image handlers can read
- the file with the given name.
- See wxImageHandler::CanRead for more info.
- */
- static bool CanRead(const wxString& filename);
- /**
- Returns @true if at least one of the available image handlers can read
- the data in the given stream.
- See wxImageHandler::CanRead for more info.
- */
- static bool CanRead(wxInputStream& stream);
- //@{
- /**
- If the image file contains more than one image and the image handler is
- capable of retrieving these individually, this function will return the
- number of available images.
- For the overload taking the parameter @a filename, that's the name
- of the file to query.
- For the overload taking the parameter @a stream, that's the opened input
- stream with image data.
- See wxImageHandler::GetImageCount() for more info.
- The parameter @a type may be one of the following values:
- @li wxBITMAP_TYPE_BMP: Load a Windows bitmap file.
- @li wxBITMAP_TYPE_GIF: Load a GIF bitmap file.
- @li wxBITMAP_TYPE_JPEG: Load a JPEG bitmap file.
- @li wxBITMAP_TYPE_PNG: Load a PNG bitmap file.
- @li wxBITMAP_TYPE_PCX: Load a PCX bitmap file.
- @li wxBITMAP_TYPE_PNM: Load a PNM bitmap file.
- @li wxBITMAP_TYPE_TIFF: Load a TIFF bitmap file.
- @li wxBITMAP_TYPE_TGA: Load a TGA bitmap file.
- @li wxBITMAP_TYPE_XPM: Load a XPM bitmap file.
- @li wxBITMAP_TYPE_ICO: Load a Windows icon file (ICO).
- @li wxBITMAP_TYPE_CUR: Load a Windows cursor file (CUR).
- @li wxBITMAP_TYPE_ANI: Load a Windows animated cursor file (ANI).
- @li wxBITMAP_TYPE_ANY: Will try to autodetect the format.
- @return Number of available images. For most image handlers, this is 1
- (exceptions are TIFF and ICO formats as well as animated GIFs
- for which this function returns the number of frames in the
- animation).
- */
- static int GetImageCount(const wxString& filename,
- wxBitmapType type = wxBITMAP_TYPE_ANY);
- static int GetImageCount(wxInputStream& stream,
- wxBitmapType type = wxBITMAP_TYPE_ANY);
- //@}
- /**
- Iterates all registered wxImageHandler objects, and returns a string containing
- file extension masks suitable for passing to file open/save dialog boxes.
- @return The format of the returned string is @c "(*.ext1;*.ext2)|*.ext1;*.ext2".
- It is usually a good idea to prepend a description before passing
- the result to the dialog.
- Example:
- @code
- wxFileDialog FileDlg( this, "Choose Image", ::wxGetCwd(), "",
- _("Image Files ") + wxImage::GetImageExtWildcard(),
- wxFD_OPEN );
- @endcode
- @see wxImageHandler
- */
- static wxString GetImageExtWildcard();
- /**
- Converts a color in RGB color space to HSV color space.
- */
- static wxImage::HSVValue RGBtoHSV(const wxImage::RGBValue& rgb);
- /**
- Converts a color in HSV color space to RGB color space.
- */
- 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.
- */
- wxImage wxNullImage;
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_appinitterm */
- //@{
- /**
- Initializes all available image handlers.
- This function calls wxImage::AddHandler() for all the available image
- handlers (see @ref image_handlers for the full list). Calling it is the
- simplest way to initialize wxImage but it creates and registers even the
- handlers your program may not use. If you want to avoid the overhead of
- doing this you need to call wxImage::AddHandler() manually just for the
- handlers that you do want to use.
- @see wxImage, wxImageHandler
- @header{wx/image.h}
- */
- void wxInitAllImageHandlers();
- //@}
|