added wxImage::ConvertAlphaToMask
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28810 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -257,6 +257,22 @@ WX_DECLARE_EXPORTED_HASH_MAP(unsigned long, wxImageHistogramEntry,
|
|||||||
|
|
||||||
Returns number of colours in the histogram.
|
Returns number of colours in the histogram.
|
||||||
|
|
||||||
|
\membersection{wxImage::ConvertAlphaToMask}\label{wximageconvertalphatomask}
|
||||||
|
|
||||||
|
\func{bool}{ConvertAlphaToMask}{\param{unsigned char}{ threshold = 128}}
|
||||||
|
|
||||||
|
If the image has alpha channel, this method converts it to mask. All pixels
|
||||||
|
with alpha value less than \arg{threshold} are replaced with mask colour
|
||||||
|
and the alpha channel is removed. Mask colour is chosen automatically using
|
||||||
|
\helpref{FindFirstUnusedColour}{wximagefindfirstunusedcolour}.
|
||||||
|
|
||||||
|
If the image image doesn't have alpha channel,
|
||||||
|
ConvertAlphaToMask does nothing.
|
||||||
|
|
||||||
|
\wxheading{Return value}
|
||||||
|
|
||||||
|
\false if FindFirstUnusedColour returns \false, \true otherwise.
|
||||||
|
|
||||||
\membersection{wxImage::ConvertToBitmap}\label{wximageconverttobitmap}
|
\membersection{wxImage::ConvertToBitmap}\label{wximageconverttobitmap}
|
||||||
|
|
||||||
\constfunc{wxBitmap}{ConvertToBitmap}{\void}
|
\constfunc{wxBitmap}{ConvertToBitmap}{\void}
|
||||||
|
@@ -185,7 +185,8 @@ public:
|
|||||||
void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
|
void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
|
||||||
unsigned char r2, unsigned char g2, unsigned char b2 );
|
unsigned char r2, unsigned char g2, unsigned char b2 );
|
||||||
|
|
||||||
// convert to monochrome image (<r,g,b> will be replaced by white, everything else by black)
|
// convert to monochrome image (<r,g,b> will be replaced by white,
|
||||||
|
// everything else by black)
|
||||||
wxImage ConvertToMono( unsigned char r, unsigned char g, unsigned char b ) const;
|
wxImage ConvertToMono( unsigned char r, unsigned char g, unsigned char b ) const;
|
||||||
|
|
||||||
// these routines are slow but safe
|
// these routines are slow but safe
|
||||||
@@ -206,6 +207,10 @@ public:
|
|||||||
bool SetMaskFromImage(const wxImage & mask,
|
bool SetMaskFromImage(const wxImage & mask,
|
||||||
unsigned char mr, unsigned char mg, unsigned char mb);
|
unsigned char mr, unsigned char mg, unsigned char mb);
|
||||||
|
|
||||||
|
// converts image's alpha channel to mask, if it has any, does nothing
|
||||||
|
// otherwise:
|
||||||
|
bool ConvertAlphaToMask(unsigned threshold = 128);
|
||||||
|
|
||||||
static bool CanRead( const wxString& name );
|
static bool CanRead( const wxString& name );
|
||||||
static int GetImageCount( const wxString& name, long type = wxBITMAP_TYPE_ANY );
|
static int GetImageCount( const wxString& name, long type = wxBITMAP_TYPE_ANY );
|
||||||
virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
|
virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
|
||||||
|
@@ -935,6 +935,44 @@ bool wxImage::SetMaskFromImage(const wxImage& mask,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxImage::ConvertAlphaToMask(unsigned threshold)
|
||||||
|
{
|
||||||
|
if (!HasAlpha())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
unsigned char mr, mg, mb;
|
||||||
|
if (!FindFirstUnusedColour(&mr, &mg, &mb))
|
||||||
|
{
|
||||||
|
wxLogError( _("No unused colour in image being masked.") );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetMask(true);
|
||||||
|
SetMaskColour(mr, mg, mb);
|
||||||
|
|
||||||
|
unsigned char *imgdata = GetData();
|
||||||
|
unsigned char *alphadata = GetAlpha();
|
||||||
|
|
||||||
|
size_t w = GetWidth();
|
||||||
|
size_t h = GetHeight();
|
||||||
|
|
||||||
|
for (size_t y = 0; y < h; y++)
|
||||||
|
{
|
||||||
|
for (size_t x = 0; x < w; x++, imgdata += 3, alphadata++)
|
||||||
|
{
|
||||||
|
if (*alphadata < threshold)
|
||||||
|
{
|
||||||
|
imgdata[0] = mr;
|
||||||
|
imgdata[1] = mg;
|
||||||
|
imgdata[2] = mb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(M_IMGDATA->m_alpha);
|
||||||
|
M_IMGDATA->m_alpha = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#if wxUSE_PALETTE
|
#if wxUSE_PALETTE
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user