wxBitmap::LoadFile and SaveFile now uses wxImage's methods in case there is no wxBitmap handler for given type

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4604 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
1999-11-17 22:33:52 +00:00
parent 169ee06c44
commit b75dd496d2
5 changed files with 49 additions and 39 deletions

View File

@@ -96,7 +96,11 @@ Its meaning is determined by the {\it type} parameter.}
The validity of these flags depends on the platform and wxWindows configuration. The validity of these flags depends on the platform and wxWindows configuration.
If all possible wxWindows settings are used, the Windows platform supports BMP file, BMP resource, If all possible wxWindows settings are used, the Windows platform supports BMP file, BMP resource,
XPM data, and XPM. Under wxGTK, the available formats are BMP file, XPM data, XPM file, and PNG file. XPM data, and XPM. Under wxGTK, the available formats are BMP file, XPM data, XPM file, and PNG file.
Under wxMotif, the available formats are XBM data, XBM file, XPM data, XPM file.} Under wxMotif, the available formats are XBM data, XBM file, XPM data, XPM file.
In addition, wxBitmap can read all formats that \helpref{wxImage}{wximage} can
(wxBITMAP\_TYPE\_JPEG, wxBITMAP\_TYPE\_PNG, wxBITMAP\_TYPE\_GIF, wxBITMAP\_TYPE\_PCX, wxBITMAP\_TYPE\_PNM).
(Of course you must have wxImage handlers loaded.) }
\wxheading{Remarks} \wxheading{Remarks}
@@ -356,7 +360,11 @@ The meaning of {\it name} is determined by the {\it type} parameter.}
\twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Load an XPM bitmap file.} \twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Load an XPM bitmap file.}
\end{twocollist} \end{twocollist}
The validity of these flags depends on the platform and wxWindows configuration.} The validity of these flags depends on the platform and wxWindows configuration.
In addition, wxBitmap can read all formats that \helpref{wxImage}{wximage} can
(wxBITMAP\_TYPE\_JPEG, wxBITMAP\_TYPE\_PNG, wxBITMAP\_TYPE\_GIF, wxBITMAP\_TYPE\_PCX, wxBITMAP\_TYPE\_PNM).
(Of course you must have wxImage handlers loaded.) }
\wxheading{Return value} \wxheading{Return value}
@@ -415,7 +423,11 @@ Saves a bitmap in the named file.
\twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Save an XPM bitmap file.} \twocolitem{{\bf wxBITMAP\_TYPE\_XPM}}{Save an XPM bitmap file.}
\end{twocollist} \end{twocollist}
The validity of these flags depends on the platform and wxWindows configuration.} The validity of these flags depends on the platform and wxWindows configuration.
In addition, wxBitmap can save all formats that \helpref{wxImage}{wximage} can
(wxBITMAP\_TYPE\_JPEG, wxBITMAP\_TYPE\_PNG).
(Of course you must have wxImage handlers loaded.) }
\docparam{palette}{An optional palette used for saving the bitmap.} \docparam{palette}{An optional palette used for saving the bitmap.}
% TODO: this parameter should % TODO: this parameter should

View File

@@ -332,7 +332,7 @@ bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(pal
{ {
wxCHECK_MSG( Ok(), FALSE, wxT("invalid bitmap") ); wxCHECK_MSG( Ok(), FALSE, wxT("invalid bitmap") );
if (type == wxBITMAP_TYPE_PNG) // Try to save the bitmap via wxImage handlers:
{ {
wxImage image( *this ); wxImage image( *this );
if (image.Ok()) return image.SaveFile( name, type ); if (image.Ok()) return image.SaveFile( name, type );
@@ -365,20 +365,13 @@ bool wxBitmap::LoadFile( const wxString &name, int type )
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
} }
else if (type == wxBITMAP_TYPE_PNG) else // try if wxImage can load it
{ {
wxImage image; wxImage image;
image.LoadFile( name, type ); if (!image.LoadFile( name, type )) return FALSE;
if (image.Ok()) *this = image.ConvertToBitmap(); if (image.Ok()) *this = image.ConvertToBitmap();
else return FALSE;
} }
else if (type == wxBITMAP_TYPE_BMP)
{
wxImage image;
image.LoadFile( name, type );
if (image.Ok()) *this = image.ConvertToBitmap();
}
else
return FALSE;
return TRUE; return TRUE;
} }

View File

@@ -332,7 +332,7 @@ bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(pal
{ {
wxCHECK_MSG( Ok(), FALSE, wxT("invalid bitmap") ); wxCHECK_MSG( Ok(), FALSE, wxT("invalid bitmap") );
if (type == wxBITMAP_TYPE_PNG) // Try to save the bitmap via wxImage handlers:
{ {
wxImage image( *this ); wxImage image( *this );
if (image.Ok()) return image.SaveFile( name, type ); if (image.Ok()) return image.SaveFile( name, type );
@@ -365,20 +365,13 @@ bool wxBitmap::LoadFile( const wxString &name, int type )
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
} }
else if (type == wxBITMAP_TYPE_PNG) else // try if wxImage can load it
{ {
wxImage image; wxImage image;
image.LoadFile( name, type ); if (!image.LoadFile( name, type )) return FALSE;
if (image.Ok()) *this = image.ConvertToBitmap(); if (image.Ok()) *this = image.ConvertToBitmap();
else return FALSE;
} }
else if (type == wxBITMAP_TYPE_BMP)
{
wxImage image;
image.LoadFile( name, type );
if (image.Ok()) *this = image.ConvertToBitmap();
}
else
return FALSE;
return TRUE; return TRUE;
} }

View File

@@ -21,6 +21,7 @@
#include "wx/log.h" #include "wx/log.h"
#include "wx/control.h" #include "wx/control.h"
#include "wx/dcmemory.h" #include "wx/dcmemory.h"
#include "wx/image.h"
#include <Xm/Xm.h> #include <Xm/Xm.h>
@@ -197,9 +198,14 @@ bool wxBitmap::LoadFile(const wxString& filename, long type)
wxBitmapHandler *handler = FindHandler(type); wxBitmapHandler *handler = FindHandler(type);
if ( handler == NULL ) { if ( handler == NULL ) {
wxLogWarning("%s: no bitmap handler for type %d defined.", (const char*) filename, type); wxImage image;
if (!image.LoadFile( filename, type )) return FALSE;
return FALSE; if (image.Ok())
{
*this = image.ConvertToBitmap();
return TRUE;
}
else return FALSE;
} }
return handler->LoadFile(this, filename, type, -1, -1); return handler->LoadFile(this, filename, type, -1, -1);
@@ -226,10 +232,10 @@ bool wxBitmap::SaveFile(const wxString& filename, int type, const wxPalette *pal
{ {
wxBitmapHandler *handler = FindHandler(type); wxBitmapHandler *handler = FindHandler(type);
if ( handler == NULL ) { if ( handler == NULL ) { // try wxImage
wxLogWarning("no bitmap handler for type %d defined.", type); wxImage image( *this );
if (image.Ok()) return image.SaveFile( filename, type );
return FALSE; else return FALSE;
} }
return handler->SaveFile(this, filename, type, palette); return handler->SaveFile(this, filename, type, palette);

View File

@@ -44,6 +44,7 @@
#include "wx/log.h" #include "wx/log.h"
#include "wx/msw/dib.h" #include "wx/msw/dib.h"
#include "wx/image.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// macros // macros
@@ -278,9 +279,14 @@ bool wxBitmap::LoadFile(const wxString& filename, long type)
wxBitmapHandler *handler = FindHandler(type); wxBitmapHandler *handler = FindHandler(type);
if ( handler == NULL ) { if ( handler == NULL ) {
wxLogWarning(wxT("no bitmap handler for type %d defined."), type); wxImage image;
if (!image.LoadFile( filename, type )) return FALSE;
return FALSE; if (image.Ok())
{
*this = image.ConvertToBitmap();
return TRUE;
}
else return FALSE;
} }
return handler->LoadFile(this, filename, type, -1, -1); return handler->LoadFile(this, filename, type, -1, -1);
@@ -307,10 +313,10 @@ bool wxBitmap::SaveFile(const wxString& filename, int type, const wxPalette *pal
{ {
wxBitmapHandler *handler = FindHandler(type); wxBitmapHandler *handler = FindHandler(type);
if ( handler == NULL ) { if ( handler == NULL ) { // try wxImage
wxLogWarning(wxT("no bitmap handler for type %d defined."), type); wxImage image( *this );
if (image.Ok()) return image.SaveFile( filename, type );
return FALSE; else return FALSE;
} }
return handler->SaveFile(this, filename, type, palette); return handler->SaveFile(this, filename, type, palette);