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:
parent
bc88f66f5f
commit
ff5ad79411
@ -257,6 +257,22 @@ WX_DECLARE_EXPORTED_HASH_MAP(unsigned long, wxImageHistogramEntry,
|
||||
|
||||
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}
|
||||
|
||||
\constfunc{wxBitmap}{ConvertToBitmap}{\void}
|
||||
|
@ -185,7 +185,8 @@ public:
|
||||
void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
|
||||
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;
|
||||
|
||||
// these routines are slow but safe
|
||||
@ -206,6 +207,10 @@ public:
|
||||
bool SetMaskFromImage(const wxImage & mask,
|
||||
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 int GetImageCount( const wxString& name, long type = wxBITMAP_TYPE_ANY );
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user