X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bc88f66f5f4028956955ad1cb676b94db713e9b3..3e2656801d825761f55ea9b0b766802c6cd32f1d:/src/common/image.cpp diff --git a/src/common/image.cpp b/src/common/image.cpp index 369bdf5fcd..469260fb47 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -935,6 +935,46 @@ bool wxImage::SetMaskFromImage(const wxImage& mask, return true; } + +bool wxImage::ConvertAlphaToMask(unsigned char 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(); + + int w = GetWidth(); + int h = GetHeight(); + + for (int y = 0; y < h; y++) + { + for (int 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; + + return true; +} #if wxUSE_PALETTE