added tests for savin PNG images in different formats; don't ask for BMP bpp if not saving as BMP

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32415 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-02-27 15:25:55 +00:00
parent a4efa72179
commit 5a566d89be

View File

@@ -1,11 +1,13 @@
/* ///////////////////////////////////////////////////////////////////////////////
* Program: image // Name: samples/image/image.cpp
* // Purpose: sample showing operations with wxImage
* Author: Robert Roebling // Author: Robert Roebling
* // Modified by:
* Copyright: (C) 1998, Robert Roebling // Created: 1998
* // RCS-ID: $Id$
*/ // Copyright: (c) 1998-2005 Robert Roebling
// License: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h". // For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h" #include "wx/wxprec.h"
@@ -20,6 +22,7 @@
#include "wx/image.h" #include "wx/image.h"
#include "wx/file.h" #include "wx/file.h"
#include "wx/filename.h"
#include "wx/mstream.h" #include "wx/mstream.h"
#include "wx/wfstream.h" #include "wx/wfstream.h"
#include "wx/quantize.h" #include "wx/quantize.h"
@@ -91,31 +94,6 @@ private:
}; };
const int nChoices = 8 ;
static const wxString bppchoices[nChoices] =
{
_T("1 bpp color"),
_T("1 bpp B&W"),
_T("4 bpp color"),
_T("8 bpp color"),
_T("8 bpp greyscale"),
_T("8 bpp red"),
_T("8 bpp own palette"),
_T("24 bpp")
};
static const int bppvalues[nChoices] =
{
wxBMP_1BPP,
wxBMP_1BPP_BW,
wxBMP_4BPP,
wxBMP_8BPP,
wxBMP_8BPP_GREY,
wxBMP_8BPP_RED,
wxBMP_8BPP_PALETTE,
wxBMP_24BPP
};
// MyFrame // MyFrame
@@ -170,25 +148,9 @@ public:
{ {
wxImage image = m_bitmap.ConvertToImage(); wxImage image = m_bitmap.ConvertToImage();
int bppselection = wxGetSingleChoiceIndex(_T("Set BMP BPP"),
_T("Set BMP BPP"),
nChoices,
bppchoices,
this);
if ( bppselection == -1 )
{
// cancelled
return;
}
image.SetOption(wxIMAGE_OPTION_BMP_FORMAT, bppvalues[bppselection]);
wxString deffilename = bppchoices[bppselection];
deffilename.Replace(wxT(" "), wxT("_"));
deffilename += wxT(".bmp");
wxString savefilename = wxFileSelector( wxT("Save Image"), wxString savefilename = wxFileSelector( wxT("Save Image"),
wxT(""), wxT(""),
deffilename, wxT(""),
(const wxChar *)NULL, (const wxChar *)NULL,
wxT("BMP files (*.bmp)|*.bmp|") wxT("BMP files (*.bmp)|*.bmp|")
wxT("PNG files (*.png)|*.png|") wxT("PNG files (*.png)|*.png|")
@@ -204,39 +166,106 @@ public:
if ( savefilename.empty() ) if ( savefilename.empty() )
return; return;
if ( image.GetOptionInt(wxIMAGE_OPTION_BMP_FORMAT) == wxBMP_8BPP_PALETTE ) wxString extension;
wxFileName::SplitPath(savefilename, NULL, NULL, &extension);
bool saved = false;
if ( extension == _T("bpp") )
{ {
unsigned char *cmap = new unsigned char [256]; static const int bppvalues[] =
for ( int i = 0; i < 256; i++ ) {
cmap[i] = (unsigned char)i; wxBMP_1BPP,
image.SetPalette(wxPalette(256, cmap, cmap, cmap)); wxBMP_1BPP_BW,
wxBMP_4BPP,
wxBMP_8BPP,
wxBMP_8BPP_GREY,
wxBMP_8BPP_RED,
wxBMP_8BPP_PALETTE,
wxBMP_24BPP
};
delete cmap; static const wxString bppchoices[] =
{
_T("1 bpp color"),
_T("1 bpp B&W"),
_T("4 bpp color"),
_T("8 bpp color"),
_T("8 bpp greyscale"),
_T("8 bpp red"),
_T("8 bpp own palette"),
_T("24 bpp")
};
int bppselection = wxGetSingleChoiceIndex(_T("Set BMP BPP"),
_T("Image sample: save file"),
WXSIZEOF(bppchoices),
bppchoices,
this);
if ( bppselection != -1 )
{
int format = bppvalues[bppselection];
image.SetOption(wxIMAGE_OPTION_BMP_FORMAT, format);
if ( format == wxBMP_8BPP_PALETTE )
{
unsigned char *cmap = new unsigned char [256];
for ( int i = 0; i < 256; i++ )
cmap[i] = (unsigned char)i;
image.SetPalette(wxPalette(256, cmap, cmap, cmap));
delete cmap;
}
}
} }
else if ( extension == _T("png") )
{
static const int pngvalues[] =
{
wxPNG_TYPE_COLOUR,
wxPNG_TYPE_COLOUR,
wxPNG_TYPE_GREY,
wxPNG_TYPE_GREY,
wxPNG_TYPE_GREY_RED,
wxPNG_TYPE_GREY_RED,
};
bool loaded; static const wxString pngchoices[] =
wxString extension = savefilename.AfterLast('.').Lower(); {
_T("Colour 8bpp"),
_T("Colour 16bpp"),
_T("Grey 8bpp"),
_T("Grey 16bpp"),
_T("Grey red 8bpp"),
_T("Grey red 16bpp"),
};
if (extension == _T("cur")) int sel = wxGetSingleChoiceIndex(_T("Set PNG format"),
_T("Image sample: save file"),
WXSIZEOF(pngchoices),
pngchoices,
this);
if ( sel != -1 )
{
image.SetOption(wxIMAGE_OPTION_PNG_FORMAT, pngvalues[sel]);
image.SetOption(wxIMAGE_OPTION_PNG_BITDEPTH, sel % 2 ? 16 : 8);
}
}
else if ( extension == _T("cur") )
{ {
image.Rescale(32,32); image.Rescale(32,32);
image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, 0); image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, 0);
image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, 0); image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, 0);
// This shows how you can save an image with explicitly // This shows how you can save an image with explicitly
// specified image format: // specified image format:
loaded = image.SaveFile(savefilename, wxBITMAP_TYPE_CUR); saved = image.SaveFile(savefilename, wxBITMAP_TYPE_CUR);
} }
else
if ( !saved )
{ {
// This one guesses image format from filename extension // This one guesses image format from filename extension
// (it may fail if the extension is not recognized): // (it may fail if the extension is not recognized):
loaded = image.SaveFile(savefilename); image.SaveFile(savefilename);
} }
if ( !loaded )
wxMessageBox(_T("No handler for this file type."),
_T("File was not saved"),
wxOK|wxCENTRE, this);
} }
private: private: