]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxImage::CanRead
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 18 Aug 1999 21:22:54 +0000 (21:22 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 18 Aug 1999 21:22:54 +0000 (21:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3421 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/image.h
samples/image/image.cpp
src/common/imagbmp.cpp
src/common/image.cpp
src/common/imaggif.cpp
src/common/imagjpeg.cpp
src/common/imagpng.cpp
src/common/imagpnm.cpp

index 4a42b42635586862131fcc5fb57b248e07afbc23..3b351600e96d7c84a593a9329b931da94549c500 100644 (file)
@@ -52,6 +52,9 @@ public:
 #if wxUSE_STREAMS
   virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE );
   virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
+
+  virtual bool CanRead( wxInputStream& stream );
+  virtual bool CanRead( const wxString& name );
 #endif
 
   inline void SetName(const wxString& name) { m_name = name; }
@@ -93,6 +96,7 @@ public:
 #if wxUSE_STREAMS
   virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE );
   virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
+  virtual bool CanRead( wxInputStream& stream );
 #endif
 };
 #endif
@@ -119,6 +123,7 @@ public:
 #if wxUSE_STREAMS
   virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE );
   virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
+  virtual bool CanRead( wxInputStream& stream );
 #endif
 };
 #endif
@@ -143,6 +148,7 @@ public:
 
 #if wxUSE_STREAMS
   virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE );
+  virtual bool CanRead( wxInputStream& stream );
 #endif
 };
 
@@ -167,6 +173,7 @@ public:
 #if wxUSE_STREAMS
   virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE );
   virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
+  virtual bool CanRead( wxInputStream& stream );
 #endif
 };
 
@@ -191,6 +198,7 @@ public:
 #if wxUSE_STREAMS
   virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=TRUE );
   virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=TRUE );
+  virtual bool CanRead( wxInputStream& stream );
 #endif
 };
 
index 30bb7eb986d92c1aafde8f1c4c1ce5df337cbbed..24306d42a60cfcc1df29b5d122b87f5a80cea45b 100644 (file)
@@ -126,22 +126,22 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
   else
     my_horse_png = new wxBitmap( image.ConvertToBitmap() );
   
-  if ( !image.LoadFile( dir + wxString("horse.jpg"), wxBITMAP_TYPE_JPEG ) )
+  if ( !image.LoadFile( dir + wxString("horse.jpg") ) )
       wxLogError("Can't load JPG image");
   else
       my_horse_jpeg = new wxBitmap( image.ConvertToBitmap() );
   
-  if ( !image.LoadFile( dir + wxString("horse.gif"), wxBITMAP_TYPE_GIF ) )
+  if ( !image.LoadFile( dir + wxString("horse.gif") ) )
       wxLogError("Can't load GIF image");
   else
     my_horse_gif = new wxBitmap( image.ConvertToBitmap() );
   
-  if ( !image.LoadFile( dir + wxString("horse.bmp"), wxBITMAP_TYPE_BMP ) )
+  if ( !image.LoadFile( dir + wxString("horse.bmp") ) )
       wxLogError("Can't load BMP image");
   else
     my_horse_bmp = new wxBitmap( image.ConvertToBitmap() );
   
-  image.LoadFile( dir + wxString("test.png"), wxBITMAP_TYPE_PNG );
+  image.LoadFile( dir + wxString("test.png") );
   my_square = new wxBitmap( image.ConvertToBitmap() );
   
   CreateAntiAliasedBitmap();
index db3f1e2b40b08783ceb66fb76ce6cf741e1c3d5a..005e007dfa77c0523504dbac344423ce13ca66ce 100644 (file)
@@ -401,6 +401,15 @@ bool wxBMPHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE
      return TRUE;
 }
 
+bool wxBMPHandler::CanRead( wxInputStream& stream )
+{
+    unsigned char hdr[2];
+    
+    stream.Read(&hdr, 2);
+    stream.SeekI(-2, wxFromCurrent);
+    return (hdr[0] == 'B' && hdr[1] == 'M');
+}
+
 #endif // wxUSE_STREAMS
 
 
index 2ee0a4c1bb891312f17c858c184987f7e5c5bf62..7478392fe2779ea2fb1abc61cb5bbbb47e25a203 100644 (file)
@@ -436,23 +436,14 @@ bool wxImage::LoadFile( wxInputStream& stream, long type )
 
     if (type==wxBITMAP_TYPE_ANY)
     {
-      // here we can try to guess the handler according the extension,
-      // but we lose the stream name !?
-      // Probably we should write methods such as 
-      // bool wxImageHandler::CanRead(wxString&)
-      // bool wxImageHandler::CanRead(sxInputStream&&)
-      // for png : see example.c
        wxList &list=GetHandlers();
-       off_t pos=stream.TellI();
-
-        wxLogNull prevent_log;
 
        for ( wxList::Node *node = list.GetFirst(); node; node = node->GetNext() )
        {  
            handler=(wxImageHandler*)node->GetData();
-           if (handler->LoadFile( this, stream, FALSE )) return TRUE;
+        if (handler->CanRead( stream ))
+            return handler->LoadFile( this, stream );
 
-           stream.SeekI(pos);
        }
 
        wxLogWarning( _T("No handler found for this image.") );
@@ -637,6 +628,33 @@ bool wxImageHandler::SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSE
 {
     return FALSE;
 }
+
+bool wxImageHandler::CanRead( wxInputStream& stream )
+{
+    return FALSE;
+}
+
+bool wxImageHandler::CanRead( const wxString& name )
+{
+#if wxUSE_STREAMS
+    if (wxFileExists(name))
+    {
+        wxFileInputStream stream(name);
+        return CanRead(stream);
+    }
+
+    else {
+        wxLogError( _T("Can't check image format of file '%s': file does not exist."), name.c_str() );
+
+        return FALSE;
+    }
+#else // !wxUSE_STREAMS
+    return FALSE;
+#endif // wxUSE_STREAMS
+}
+
+
+
 #endif // wxUSE_STREAMS
 
 //-----------------------------------------------------------------------------
index 785f91da5481f2d0a7921b7282586e11c9c713c7..c6a775e15cde7d2294bc697557870c731bd1c595 100644 (file)
@@ -66,4 +66,13 @@ bool wxGIFHandler::SaveFile( wxImage * WXUNUSED(image),
     return FALSE;
 }
 
+bool wxGIFHandler::CanRead( wxInputStream& stream )
+{
+    unsigned char hdr[5];
+    
+    stream.Read(&hdr, 5);
+    stream.SeekI(-5, wxFromCurrent);
+    return (hdr[0] == 'G' && hdr[1] == 'I' && hdr[2] == 'F' && hdr[3] == '8' && hdr[4] == '9');
+}
+
 #endif
index 0b89c5c3ec2c0234718d03163cf2c606f1e5c21b..94bded7c0198904eafebe1e40143b78c22aa548e 100644 (file)
@@ -310,6 +310,16 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo
     return TRUE;
 }
 
+
+bool wxJPEGHandler::CanRead( wxInputStream& stream )
+{
+    unsigned char hdr[2];
+    
+    stream.Read(&hdr, 2);
+    stream.SeekI(-2, wxFromCurrent);
+    return (hdr[0] == 0xFF && hdr[1] == 0xD8);
+}
+
 #endif 
   // wxUSE_STREAMS
 
index 1a27982b129883f96f860bfce63de5d2fd12f2c0..7609aae068ee107642818e0f51ef706f37a9739d 100644 (file)
@@ -346,6 +346,15 @@ bool wxPNGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbos
     return TRUE;
 }
 
+bool wxPNGHandler::CanRead( wxInputStream& stream )
+{
+    unsigned char hdr[4];
+    
+    stream.Read(&hdr, 4);    
+    stream.SeekI(-4, wxFromCurrent);
+    return (hdr[0] == 0x89 && hdr[1] == 'P' && hdr[2] == 'N' && hdr[3] == 'G');
+}
+
 #endif
   // wxUSE_STREAMS
 
index ffbd4c1bd4ce898640705ab0754299f045278e74..d2b3244965c604172535172409f8ddd54dd91ca6 100644 (file)
@@ -136,6 +136,12 @@ bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUS
     return (stream.LastError()==wxStream_NOERROR);
 }
 
+bool wxPNMHandler::CanRead( wxInputStream& stream )
+{
+    return FALSE; // VS - temporary - FIXME
+}
+
+
 #endif // wxUSE_STREAMS