/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
-#pragma implementation "pngread.h"
-#pragma implementation "pnghand.h"
+# pragma implementation "pngread.h"
+# pragma implementation "pnghand.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+# pragma hdrstop
#endif
#include <stdlib.h>
# include <fstream>
#endif
-#include <windows.h>
-#include <wx/palette.h>
-#include <wx/bitmap.h>
-#include <wx/mac/pnghand.h>
-#include <wx/mac/pngread.h>
+#ifndef __DARWIN__
+# include <windows.h>
+#endif
+#include "wx/msgdlg.h"
+#include "wx/palette.h"
+#include "wx/bitmap.h"
+#include "wx/mac/pnghand.h"
+#include "wx/mac/pngread.h"
+#include "wx/mac/private.h"
extern "C" {
#include "png.h"
extern CTabHandle wxMacCreateColorTable( int numColors ) ;
extern void wxMacDestroyColorTable( CTabHandle colors ) ;
extern void wxMacSetColorTableEntry( CTabHandle newColors , int index , int red , int green , int blue ) ;
-extern GWorldPtr wxMacCreateGWorld( int height , int width , int depth ) ;
+extern GWorldPtr wxMacCreateGWorld( int width , int height , int depth ) ;
extern void wxMacDestroyGWorld( GWorldPtr gw ) ;
void
lpbi = NULL;
bgindex = -1;
- Palette = 0;
+ m_palette = 0;
imageOK = FALSE;
}
Width = 0; Height = 0; // Dimensions
Depth = 0; // (bits x pixel)
- ColorType = 0; // Bit 1 = Palette used
+ ColorType = 0; // Bit 1 = m_palette used
// Bit 2 = Color used
// Bit 3 = Alpha used
lpbi = NULL;
bgindex = -1;
- Palette = 0;
+ m_palette = 0;
imageOK = ReadFile (ImageFileName);
}
{
Width = width; Height = height; Depth = depth;
ColorType = (colortype>=0) ? colortype: ((Depth>8) ? COLORTYPE_COLOR: 0);
+ delete m_palette;
+ m_palette = NULL;
+ delete[] RawImage;
+ RawImage = NULL;
- if (lpbi)
- {
- wxMacDestroyGWorld( lpbi ) ;
-// delete Palette;
+ if (lpbi) {
+ wxMacDestroyGWorld( (GWorldPtr) lpbi ) ;
}
- RawImage = 0;
- Palette = 0;
- if (lpbi = wxMacCreateGWorld( Width , Height , Depth) )
+ lpbi = wxMacCreateGWorld( Width , Height , Depth);
+ if (lpbi)
{
EfeWidth = (long)(((long)Width*Depth + 31) / 32) * 4;
int bitwidth = width ;
wxPNGReader::~wxPNGReader ( )
{
- delete[] RawImage ;
- if (lpbi) {
- wxMacDestroyGWorld( lpbi ) ;
- }
- delete Palette;
+ if (RawImage != NULL) {
+ delete[] RawImage ;
+ RawImage = NULL;
+ }
+ if (lpbi) {
+ wxMacDestroyGWorld( (GWorldPtr) lpbi ) ;
+ lpbi = NULL;
+ }
+ if (m_palette != NULL) {
+ delete m_palette;
+ m_palette = NULL;
+ }
}
{
if (!Inside(x, y)) return FALSE;
- if (Palette) {
- return Palette->GetRGB(GetIndex(x, y), r, g, b);
+ if (m_palette) {
+ return m_palette->GetRGB(GetIndex(x, y), r, g, b);
/* PALETTEENTRY entry;
- ::GetPaletteEntries((HPALETTE) Palette->GetHPALETTE(), GetIndex(x, y), 1, &entry);
+ ::GetPaletteEntries((HPALETTE) m_palette->GetHPALETTE(), GetIndex(x, y), 1, &entry);
*r = entry.peRed;
*g = entry.peGreen;
*b = entry.peBlue; */
if (ColorType & COLORTYPE_PALETTE)
{
- if (!Palette) return FALSE;
- SetIndex(x, y, Palette->GetPixel(r, g, b));
+ if (!m_palette) return FALSE;
+ SetIndex(x, y, m_palette->GetPixel(r, g, b));
} else {
ImagePointerType ImagePointer = RawImage + EfeWidth*y + (x*Depth >> 3);
bool wxPNGReader::SetPalette(wxPalette* colourmap)
{
+ delete m_palette ;
if (!colourmap)
return FALSE;
ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR);
- Palette = colourmap;
+ m_palette = new wxPalette( *colourmap );
return true ;
-// return (DibSetUsage(lpbi, (HPALETTE) Palette->GetHPALETTE(), WXIMA_COLORS ) != 0);
+// return (DibSetUsage(lpbi, (HPALETTE) m_palette->GetHPALETTE(), WXIMA_COLORS ) != 0);
}
bool
wxPNGReader::SetPalette(int n, byte *r, byte *g, byte *b)
{
- Palette = new wxPalette();
- if (!Palette)
+ delete m_palette ;
+ m_palette = new wxPalette();
+ if (!m_palette)
return FALSE;
if (!g) g = r;
if (!b) b = g;
- Palette->Create(n, r, g, b);
+ m_palette->Create(n, r, g, b);
ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR);
return true ;
-// return (DibSetUsage(lpbi, (HPALETTE) Palette->GetHPALETTE(), WXIMA_COLORS ) != 0);
+// return (DibSetUsage(lpbi, (HPALETTE) m_palette->GetHPALETTE(), WXIMA_COLORS ) != 0);
}
bool
wxPNGReader::SetPalette(int n, rgb_color_struct *rgb_struct)
{
- Palette = new wxPalette();
- if (!Palette)
+ delete m_palette ;
+ m_palette = new wxPalette();
+ if (!m_palette)
return FALSE;
byte r[256], g[256], b[256];
if (bgindex != -1)
r[bgindex] = g[bgindex] = b[bgindex] = 0;
- Palette->Create(n, r, g, b);
+ m_palette->Create(n, r, g, b);
ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR);
return true ;
-// return (DibSetUsage(lpbi, (HPALETTE) Palette->GetHPALETTE(), WXIMA_COLORS ) != 0);
+// return (DibSetUsage(lpbi, (HPALETTE) m_palette->GetHPALETTE(), WXIMA_COLORS ) != 0);
}
void wxPNGReader::NullData()
{
- lpbi = NULL;
- Palette = NULL;
+ if (lpbi) {
+ wxMacDestroyGWorld( (GWorldPtr) lpbi ) ;
+ lpbi = NULL;
+ }
+ if (m_palette != NULL) {
+ delete m_palette;
+ m_palette = NULL;
+ }
}
wxBitmap* wxPNGReader::GetBitmap(void)
bitmap->SetWidth(GetWidth());
bitmap->SetHeight(GetHeight());
bitmap->SetDepth(GetDepth());
- if ( GetDepth() > 1 && Palette )
- bitmap->SetPalette(*Palette);
+ if ( GetDepth() > 1 && m_palette )
+ bitmap->SetPalette(*m_palette);
bitmap->SetOk(TRUE);
ReleaseDC(NULL, dc2);
HBITMAP oldBitmap = (HBITMAP) ::SelectObject(dc, tmpBitmap);
- if ( Palette )
+ if ( m_palette )
{
- HPALETTE oldPal = ::SelectPalette(dc, (HPALETTE) Palette->GetHPALETTE(), FALSE);
+ HPALETTE oldPal = ::SelectPalette(dc, (HPALETTE) m_palette->GetHPALETTE(), FALSE);
::RealizePalette(dc);
}
bitmap->SetWidth(GetWidth());
bitmap->SetHeight(GetHeight());
bitmap->SetDepth(GetDepth());
- if ( GetDepth() > 1 && Palette )
- bitmap->SetPalette(*Palette);
+ if ( GetDepth() > 1 && m_palette )
+ bitmap->SetPalette(*m_palette);
bitmap->SetOk(TRUE);
wxPNGReaderIter iter(this);
/* open the file */
- fp = fopen(wxUnix2MacFilename( ImageFileName ), "rb");
+ fp = fopen( ImageFileName , "rb" );
+
if (!fp)
return FALSE;
if (!info_ptr)
{
fclose(fp);
- delete(png_ptr);
+ delete png_ptr;
return FALSE;
}
/* set error handling */
{
png_read_destroy(png_ptr, info_ptr, (png_info *)0);
fclose(fp);
- delete(png_ptr);
- delete(info_ptr);
+ delete png_ptr;
+ delete info_ptr;
/* If we get here, we had a problem reading the file */
return FALSE;
GetGWorld( &origPort , &origDevice ) ;
// ignore shapedc
- SetGWorld( lpbi , NULL ) ;
+ SetGWorld( (GWorldPtr) lpbi , NULL ) ;
do
{
// (unsigned char *)iter.GetRow();
{
if ( pixel_depth == 8 )
{
+ for ( size_t i = 0 ; i < info_ptr->width ; ++i )
+ {
+ png_color_struct* color ;
+ RGBColor col ;
+
+ int index = row_pointers[i] ;
+ color = &info_ptr->palette[index] ;
+ col.red = (((int)color->red) << 8) | ((int)color->red) ;
+ col.green = (((int)color->green) << 8) | ((int)color->green) ;
+ col.blue = (((int)color->blue) << 8) | ((int)color->blue) ;
+ SetCPixel( i, y, &col);
+ }
+ /*
png_color_struct* color ;
RGBColor col ;
unsigned char* p = &row_pointers[0] ;
+ PenNormal() ;
MoveTo( 0 , y ) ;
- unsigned char lastcol = *p ;
- color = &info_ptr->palette[lastcol] ;
+ int index = *p ;
+ color = &info_ptr->palette[index] ;
col.red = (color->red << 8) | color->red ;
col.green = (color->green << 8) | color->green ;
col.blue = (color->blue << 8) | color->blue ;
RGBForeColor( &col ) ;
+ col.red = col.green = col.blue = 0xFFFF ;
+ RGBBackColor( &col ) ;
for ( int i = 0 ; i < info_ptr->width ; ++i , ++p)
{
- if ( *p != lastcol )
+ if ( *p != index )
{
LineTo( i , y ) ;
- lastcol = *p ;
- color = &info_ptr->palette[lastcol] ;
- col.red = (color->red << 8) | color->red ;
- col.green = (color->green << 8) | color->green ;
- col.blue = (color->blue << 8) | color->blue ;
+ index = *p ;
+ color = &info_ptr->palette[index] ;
+ col.red = (((int)color->red) << 8) | ((int)color->red) ;
+ col.green = (((int)color->green) << 8) | ((int)color->green) ;
+ col.blue = (((int)color->blue) << 8) | ((int)color->blue) ;
RGBForeColor( &col ) ;
}
}
- LineTo( info_ptr->width - 1 , y ) ;
+ LineTo( info_ptr->width , y ) ;
+ */
}
else
{
- for ( int i = 0 ; i < info_ptr->width ; ++i )
+ for ( size_t i = 0 ; i < info_ptr->width ; ++i )
{
png_color_struct* color ;
RGBColor col ;
int index = ( row_pointers[byte] >> offset ) & ( 0xFF >> ( 8 - pixel_depth ) );
color = &info_ptr->palette[index] ;
- col.red = (color->red << 8) | color->red ;
- col.green = (color->green << 8) | color->green ;
- col.blue = (color->blue << 8) | color->blue ;
+ col.red = (((int)color->red) << 8) | ((int)color->red) ;
+ col.green = (((int)color->green) << 8) | ((int)color->green) ;
+ col.blue = (((int)color->blue) << 8) | ((int)color->blue) ;
SetCPixel( i, y, &col);
}
}
}
else
{
- for ( int i = 0 ; i < info_ptr->width ; ++i )
+ for ( size_t i = 0 ; i < info_ptr->width ; ++i )
{
png_color_struct* color ;
RGBColor col ;
color =(png_color_struct*) (&row_pointers[i*3]) ;
- col.red = (color->red << 8) | color->red ;
- col.green = (color->green << 8) | color->green ;
- col.blue = (color->blue << 8) | color->blue ;
+ col.red = (((int)color->red) << 8) | ((int)color->red) ;
+ col.green = (((int)color->green) << 8) | ((int)color->green) ;
+ col.blue = (((int)color->blue) << 8) | ((int)color->blue) ;
SetCPixel( i, y, &col);
}
}
png_read_destroy(png_ptr, info_ptr, (png_info *)0);
/* free the structures */
- delete(png_ptr);
- delete(info_ptr);
+ delete png_ptr;
+ delete info_ptr;
/* close the file */
fclose(fp);
if (!info_ptr)
{
fclose(fp);
- delete(png_ptr);
+ delete png_ptr;
return FALSE;
}
{
png_write_destroy(png_ptr);
fclose(fp);
- delete(png_ptr);
- delete(info_ptr);
+ delete png_ptr;
+ delete info_ptr;
/* If we get here, we had a problem reading the file */
return FALSE;
delete[] (info_ptr->palette);
/* free the structures */
- delete(png_ptr);
- delete(info_ptr);
+ delete png_ptr;
+ delete info_ptr;
/* close the file */
fclose(fp);
if ( !GetPalette() )
return FALSE;
- ofstream str(filename);
+ wxSTD ofstream str(filename);
if ( str.bad() )
return FALSE;
return FALSE;
}
-bool wxPNGFileHandler::SaveFile(wxBitmap *bitmap, const wxString& name, int type, const wxPalette *pal)
+bool wxPNGFileHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, int type, const wxPalette *pal)
{
return FALSE;
}