support for multiple images in one file
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13306 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
05813ada9a
commit
60d43ad883
@ -46,7 +46,7 @@ public:
|
||||
virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE, int index=0 );
|
||||
virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
|
||||
|
||||
virtual int GetImageCount( wxInputStream& stream );
|
||||
virtual int GetImagesCount( wxInputStream& stream );
|
||||
|
||||
bool CanRead( wxInputStream& stream ) { return DoCanRead(stream); }
|
||||
bool CanRead( const wxString& name );
|
||||
@ -92,12 +92,12 @@ public:
|
||||
wxImage();
|
||||
wxImage( int width, int height );
|
||||
wxImage( int width, int height, unsigned char* data, bool static_data = FALSE );
|
||||
wxImage( const wxString& name, long type = wxBITMAP_TYPE_ANY );
|
||||
wxImage( const wxString& name, const wxString& mimetype );
|
||||
wxImage( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
|
||||
wxImage( const wxString& name, const wxString& mimetype, int index = -1 );
|
||||
|
||||
#if wxUSE_STREAMS
|
||||
wxImage( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY );
|
||||
wxImage( wxInputStream& stream, const wxString& mimetype );
|
||||
wxImage( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1 );
|
||||
wxImage( wxInputStream& stream, const wxString& mimetype, int index = -1 );
|
||||
#endif // wxUSE_STREAMS
|
||||
|
||||
wxImage( const wxImage& image );
|
||||
@ -164,13 +164,15 @@ public:
|
||||
unsigned char mr, unsigned char mg, unsigned char mb);
|
||||
|
||||
static bool CanRead( const wxString& name );
|
||||
virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY );
|
||||
virtual bool LoadFile( const wxString& name, const wxString& mimetype );
|
||||
static int GetImagesCount( const wxString& name, long type = wxBITMAP_TYPE_ANY );
|
||||
virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
|
||||
virtual bool LoadFile( const wxString& name, const wxString& mimetype, int index = -1 );
|
||||
|
||||
#if wxUSE_STREAMS
|
||||
static bool CanRead( wxInputStream& stream );
|
||||
virtual bool LoadFile( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY );
|
||||
virtual bool LoadFile( wxInputStream& stream, const wxString& mimetype );
|
||||
static int GetImagesCount( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY );
|
||||
virtual bool LoadFile( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1 );
|
||||
virtual bool LoadFile( wxInputStream& stream, const wxString& mimetype, int index = -1 );
|
||||
#endif
|
||||
|
||||
virtual bool SaveFile( const wxString& name, int type );
|
||||
|
@ -40,7 +40,7 @@ public:
|
||||
virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE, int index=0 );
|
||||
virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
|
||||
virtual bool DoCanRead( wxInputStream& stream );
|
||||
virtual int GetImageCount( wxInputStream& stream );
|
||||
virtual int GetImagesCount( wxInputStream& stream );
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
@ -108,25 +108,25 @@ wxImage::wxImage( int width, int height, unsigned char* data, bool static_data )
|
||||
Create( width, height, data, static_data );
|
||||
}
|
||||
|
||||
wxImage::wxImage( const wxString& name, long type )
|
||||
wxImage::wxImage( const wxString& name, long type, int index )
|
||||
{
|
||||
LoadFile( name, type );
|
||||
LoadFile( name, type, index );
|
||||
}
|
||||
|
||||
wxImage::wxImage( const wxString& name, const wxString& mimetype )
|
||||
wxImage::wxImage( const wxString& name, const wxString& mimetype, int index )
|
||||
{
|
||||
LoadFile( name, mimetype );
|
||||
LoadFile( name, mimetype, index );
|
||||
}
|
||||
|
||||
#if wxUSE_STREAMS
|
||||
wxImage::wxImage( wxInputStream& stream, long type )
|
||||
wxImage::wxImage( wxInputStream& stream, long type, int index )
|
||||
{
|
||||
LoadFile( stream, type );
|
||||
LoadFile( stream, type, index );
|
||||
}
|
||||
|
||||
wxImage::wxImage( wxInputStream& stream, const wxString& mimetype )
|
||||
wxImage::wxImage( wxInputStream& stream, const wxString& mimetype, int index )
|
||||
{
|
||||
LoadFile( stream, mimetype );
|
||||
LoadFile( stream, mimetype, index );
|
||||
}
|
||||
#endif // wxUSE_STREAMS
|
||||
|
||||
@ -890,14 +890,14 @@ bool wxImage::HasOption(const wxString& name) const
|
||||
return (M_IMGDATA->m_optionNames.Index(name, FALSE) != wxNOT_FOUND);
|
||||
}
|
||||
|
||||
bool wxImage::LoadFile( const wxString& filename, long type )
|
||||
bool wxImage::LoadFile( const wxString& filename, long type, int index )
|
||||
{
|
||||
#if wxUSE_STREAMS
|
||||
if (wxFileExists(filename))
|
||||
{
|
||||
wxFileInputStream stream(filename);
|
||||
wxBufferedInputStream bstream( stream );
|
||||
return LoadFile(bstream, type);
|
||||
return LoadFile(bstream, type, index);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -910,14 +910,14 @@ bool wxImage::LoadFile( const wxString& filename, long type )
|
||||
#endif // wxUSE_STREAMS
|
||||
}
|
||||
|
||||
bool wxImage::LoadFile( const wxString& filename, const wxString& mimetype )
|
||||
bool wxImage::LoadFile( const wxString& filename, const wxString& mimetype, int index )
|
||||
{
|
||||
#if wxUSE_STREAMS
|
||||
if (wxFileExists(filename))
|
||||
{
|
||||
wxFileInputStream stream(filename);
|
||||
wxBufferedInputStream bstream( stream );
|
||||
return LoadFile(bstream, mimetype);
|
||||
return LoadFile(bstream, mimetype, index);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -970,23 +970,72 @@ bool wxImage::CanRead( const wxString &name )
|
||||
#endif
|
||||
}
|
||||
|
||||
int wxImage::GetImagesCount( const wxString &name, long type )
|
||||
{
|
||||
#if wxUSE_STREAMS
|
||||
wxFileInputStream stream(name);
|
||||
return GetImagesCount(stream, type);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if wxUSE_STREAMS
|
||||
|
||||
bool wxImage::CanRead( wxInputStream &stream )
|
||||
{
|
||||
wxList &list=GetHandlers();
|
||||
wxList &list=GetHandlers();
|
||||
|
||||
for ( wxList::Node *node = list.GetFirst(); node; node = node->GetNext() )
|
||||
for ( wxList::Node *node = list.GetFirst(); node; node = node->GetNext() )
|
||||
{
|
||||
wxImageHandler *handler=(wxImageHandler*)node->GetData();
|
||||
if (handler->CanRead( stream ))
|
||||
return TRUE;
|
||||
wxImageHandler *handler=(wxImageHandler*)node->GetData();
|
||||
if (handler->CanRead( stream ))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool wxImage::LoadFile( wxInputStream& stream, long type )
|
||||
int wxImage::GetImagesCount( wxInputStream &stream, long type )
|
||||
{
|
||||
wxImageHandler *handler;
|
||||
|
||||
if ( type == wxBITMAP_TYPE_ANY )
|
||||
{
|
||||
wxList &list=GetHandlers();
|
||||
|
||||
for (wxList::Node *node = list.GetFirst(); node; node = node->GetNext())
|
||||
{
|
||||
handler=(wxImageHandler*)node->GetData();
|
||||
if ( handler->CanRead(stream) )
|
||||
return handler->GetImagesCount(stream);
|
||||
|
||||
}
|
||||
|
||||
wxLogWarning(_("No handler found for image type."));
|
||||
return 0;
|
||||
}
|
||||
|
||||
handler = FindHandler(type);
|
||||
|
||||
if ( !handler )
|
||||
{
|
||||
wxLogWarning(_("No image handler for type %d defined."), type);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( handler->CanRead(stream) )
|
||||
{
|
||||
return handler->GetImagesCount(stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogError(_("Image file is not of type %d."), type);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool wxImage::LoadFile( wxInputStream& stream, long type, int index )
|
||||
{
|
||||
UnRef();
|
||||
|
||||
@ -994,15 +1043,15 @@ bool wxImage::LoadFile( wxInputStream& stream, long type )
|
||||
|
||||
wxImageHandler *handler;
|
||||
|
||||
if (type==wxBITMAP_TYPE_ANY)
|
||||
if ( type == wxBITMAP_TYPE_ANY )
|
||||
{
|
||||
wxList &list=GetHandlers();
|
||||
|
||||
for ( wxList::Node *node = list.GetFirst(); node; node = node->GetNext() )
|
||||
{
|
||||
handler=(wxImageHandler*)node->GetData();
|
||||
if (handler->CanRead( stream ))
|
||||
return handler->LoadFile( this, stream );
|
||||
if ( handler->CanRead(stream) )
|
||||
return handler->LoadFile(this, stream, TRUE/*verbose*/, index);
|
||||
|
||||
}
|
||||
|
||||
@ -1019,10 +1068,10 @@ bool wxImage::LoadFile( wxInputStream& stream, long type )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return handler->LoadFile( this, stream );
|
||||
return handler->LoadFile(this, stream, TRUE/*verbose*/, index);
|
||||
}
|
||||
|
||||
bool wxImage::LoadFile( wxInputStream& stream, const wxString& mimetype )
|
||||
bool wxImage::LoadFile( wxInputStream& stream, const wxString& mimetype, int index )
|
||||
{
|
||||
UnRef();
|
||||
|
||||
@ -1037,7 +1086,7 @@ bool wxImage::LoadFile( wxInputStream& stream, const wxString& mimetype )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return handler->LoadFile( this, stream );
|
||||
return handler->LoadFile( this, stream, index );
|
||||
}
|
||||
|
||||
bool wxImage::SaveFile( wxOutputStream& stream, int type )
|
||||
@ -1190,7 +1239,7 @@ bool wxImageHandler::SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSE
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int wxImageHandler::GetImageCount( wxInputStream& WXUNUSED(stream) )
|
||||
int wxImageHandler::GetImagesCount( wxInputStream& WXUNUSED(stream) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
@ -157,6 +157,9 @@ TIFFwxOpen(wxOutputStream &stream, const char* name, const char* mode)
|
||||
|
||||
bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose, int index )
|
||||
{
|
||||
if (index == -1)
|
||||
index = 0;
|
||||
|
||||
image->Destroy();
|
||||
|
||||
TIFF *tif = TIFFwxOpen( stream, "image", "r" );
|
||||
@ -268,7 +271,7 @@ bool wxTIFFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int wxTIFFHandler::GetImageCount( wxInputStream& stream )
|
||||
int wxTIFFHandler::GetImagesCount( wxInputStream& stream )
|
||||
{
|
||||
TIFF *tif = TIFFwxOpen( stream, "image", "r" );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user