+wxImage wxImage::ConvertToDisabled(unsigned char brightness) const
+{
+ wxImage image;
+ wxCHECK_MSG(IsOk(), image, "invalid image");
+
+ const int w = M_IMGDATA->m_width;
+ const int h = M_IMGDATA->m_height;
+ size_t size = size_t(w) * h;
+ image.Create(w, h, false);
+ const unsigned char* alpha = M_IMGDATA->m_alpha;
+ if (alpha)
+ {
+ image.SetAlpha();
+ memcpy(image.GetAlpha(), alpha, size);
+ }
+ const unsigned char mask_r = M_IMGDATA->m_maskRed;
+ const unsigned char mask_g = M_IMGDATA->m_maskGreen;
+ const unsigned char mask_b = M_IMGDATA->m_maskBlue;
+ const bool hasMask = M_IMGDATA->m_hasMask;
+ if (hasMask)
+ image.SetMaskColour(mask_r, mask_g, mask_b);
+
+ const unsigned char* src = M_IMGDATA->m_data;
+ unsigned char* dst = image.GetData();
+ while (size--)
+ {
+ unsigned char r = *src++;
+ unsigned char g = *src++;
+ unsigned char b = *src++;
+ if (!hasMask || r != mask_r || g != mask_g || b != mask_b)
+ wxColour::MakeDisabled(&r, &g, &b, brightness);
+ *dst++ = r;
+ *dst++ = g;
+ *dst++ = b;
+ }
+ return image;
+}
+