\docparam{mimetype}{MIME type string (for example 'image/jpeg')}
\docparam{index}{Index of the image to load in the case that the image file contains multiple images.
-This is only used by ICO and TIFF handlers. The default value (-1) means
+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 TIFF handler and as the largest and most colourful one by the ICO handler.}
+the GIF and TIFF handler and as the largest and most colourful one by the ICO handler.}
\wxheading{Remarks}
\docparam{mimetype}{MIME type string (for example 'image/jpeg')}
\docparam{index}{Index of the image to load in the case that the image file contains multiple images.
-This is only used by ICO and TIFF handlers. The default value (-1) means
+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 TIFF handler and as the largest and most colourful one by the ICO handler.}
+the GIF and TIFF handler and as the largest and most colourful one by the ICO handler.}
\wxheading{Remarks}
\wxheading{Return value}
-TRUE if the operation succeeded, FALSE otherwise.
+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.
\wxheading{See also}
#if wxUSE_STREAMS
-bool wxGIFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose, int WXUNUSED(index) )
+bool wxGIFHandler::LoadFile(wxImage *image, wxInputStream& stream,
+ bool verbose, int index)
{
wxGIFDecoder *decod;
int error;
- bool ok;
+ bool ok = TRUE;
// image->Destroy();
decod = new wxGIFDecoder(&stream, TRUE);
/* go on; image data is OK */
}
- ok = decod->ConvertToImage(image);
+ if (index != -1)
+ {
+ // We're already on index = 0 by default. So no need
+ // to call GoFrame(0) then. On top of that GoFrame doesn't
+ // accept an index of 0. (Instead GoFirstFrame() should be used)
+ // Also if the gif image has only one frame, calling GoFrame(0)
+ // fails because GoFrame() only works with gif animations.
+ // (It fails if IsAnimation() returns FALSE)
+ // All valid reasons to NOT call GoFrame when index equals 0.
+ if (index != 0)
+ {
+ ok = decod->GoFrame(index);
+ }
+ }
+
+ if (ok)
+ {
+ ok = decod->ConvertToImage(image);
+ }
+ else
+ {
+ wxLogError(_("GIF: Invalid gif index."));
+ }
+
delete decod;
return ok;