// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-/*
- We don't put pragma implement in this file because it is already present in
- src/common/image.cpp
-*/
+#ifdef __GNUG__
+#pragma implementation "imagbmp.h"
+#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#pragma hdrstop
#endif
-#include "wx/image.h"
+#include "wx/imagbmp.h"
#include "wx/bitmap.h"
#include "wx/debug.h"
#include "wx/log.h"
// wxBMPHandler
//-----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxBMPHandler,wxImageHandler)
-#endif
#if wxUSE_STREAMS
#define poffset (line * width * 3 + column * 3)
-bool wxBMPHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSED(verbose) )
+bool wxBMPHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose, int WXUNUSED(index) )
{
int rshift = 0, gshift = 0, bshift = 0;
wxUint8 aByte;
int height = (int)wxINT32_SWAP_ON_BE( dbuf[1] );
if (width > 32767)
{
- wxLogError( _T("Image width > 32767 pixels for file.") );
+ if (verbose)
+ wxLogError( _("BMP: Image width > 32767 pixels for file.") );
return FALSE;
}
if (height > 32767)
{
- wxLogError( _T("Image height > 32767 pixels for file.") );
+ if (verbose)
+ wxLogError( _("BMP: Image height > 32767 pixels for file.") );
return FALSE;
}
int bpp = (int)wxUINT16_SWAP_ON_BE( aWord );
if (bpp != 1 && bpp != 4 && bpp != 8 && bpp != 16 && bpp != 24 && bpp != 32)
{
- wxLogError( _T("unknown bitdepth in file.") );
+ if (verbose)
+ wxLogError( _("BMP: Unknown bitdepth in file.") );
return FALSE;
}
int comp = (int)wxINT32_SWAP_ON_BE( dbuf[0] );
if (comp != BI_RGB && comp != BI_RLE4 && comp != BI_RLE8 && comp != BI_BITFIELDS)
{
- wxLogError( _T("unknown encoding in Windows BMP file.") );
+ if (verbose)
+ wxLogError( _("BMP: Unknown encoding in file.") );
return FALSE;
}
((comp == BI_RLE8) && (bpp != 8)) ||
((comp == BI_BITFIELDS) && (bpp != 16 && bpp != 32)))
{
- wxLogError( _T("encoding of BMP doesn't match bitdepth.") );
+ if (verbose)
+ wxLogError( _("BMP: Encoding doesn't match bitdepth.") );
return FALSE;
}
if (bpp < 16)
cmap = (struct _cmap *)malloc(sizeof(struct _cmap) * ncolors);
if (!cmap)
{
- wxLogError( _T("Cannot allocate RAM for color map in BMP file.") );
+ if (verbose)
+ wxLogError( _("BMP: Couldn't allocate memory.") );
return FALSE;
}
}
unsigned char *ptr = image->GetData();
if (!ptr)
{
- wxLogError( _T("Cannot allocate RAM for RGB data in file.") );
+ if (verbose)
+ wxLogError( _("BMP: Couldn't allocate memory.") );
if (cmap)
free(cmap);
return FALSE;
{
if (comp == BI_RLE4)
{
- wxLogError( _T("Can't deal with 4bit encoded yet.") );
+ if (verbose)
+ wxLogError( _("BMP: Cannot deal with 4bit encoded yet.") );
image->Destroy();
free(cmap);
return FALSE;
ptr[poffset] = temp;
temp = (aWord & gmask) >> gshift;
ptr[poffset + 1] = temp;
- temp = (aWord & bmask) >> gshift;
+ temp = (aWord & bmask) >> bshift;
ptr[poffset + 2] = temp;
column++;
}
return TRUE;
}
+bool wxBMPHandler::DoCanRead( wxInputStream& stream )
+{
+ unsigned char hdr[2];
+
+ stream.Read(&hdr, 2);
+ stream.SeekI(-2, wxFromCurrent);
+ return (hdr[0] == 'B' && hdr[1] == 'M');
+}
+
#endif // wxUSE_STREAMS