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:
@@ -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:
|
||||||
|
Reference in New Issue
Block a user