X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/30f27c00d6c93974a51edcde11152b81b11eb336..e409b62aaf6b333803027645ecc77de6c92cae2d:/src/common/image.cpp diff --git a/src/common/image.cpp b/src/common/image.cpp index 6f1a729952..8e65698989 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -51,6 +51,10 @@ #endif // wxUSE_FILE/wxUSE_FFILE #endif // HAS_FILE_STREAMS +#if wxUSE_VARIANT +IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxImage,WXDLLEXPORT) +#endif + //----------------------------------------------------------------------------- // wxImage //----------------------------------------------------------------------------- @@ -469,13 +473,7 @@ wxImage wxImage::Scale( int width, int height, int quality ) const unsigned char *source_alpha = 0 ; unsigned char *target_alpha = 0 ; - if (M_IMGDATA->m_hasMask) - { - image.SetMaskColour( M_IMGDATA->m_maskRed, - M_IMGDATA->m_maskGreen, - M_IMGDATA->m_maskBlue ); - } - else + if ( !M_IMGDATA->m_hasMask ) { source_alpha = M_IMGDATA->m_alpha ; if ( source_alpha ) @@ -514,6 +512,14 @@ wxImage wxImage::Scale( int width, int height, int quality ) const } } + // If the original image has a mask, apply the mask to the new image + if (M_IMGDATA->m_hasMask) + { + image.SetMaskColour( M_IMGDATA->m_maskRed, + M_IMGDATA->m_maskGreen, + M_IMGDATA->m_maskBlue ); + } + // In case this is a cursor, make sure the hotspot is scaled accordingly: if ( HasOption(wxIMAGE_OPTION_CUR_HOTSPOT_X) ) image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, @@ -809,11 +815,11 @@ wxImage wxImage::BlurHorizontal(int blurRadius) } dst = dst_data + y * M_IMGDATA->m_width*3; - dst[0] = sum_r / blurArea; - dst[1] = sum_g / blurArea; - dst[2] = sum_b / blurArea; + dst[0] = (unsigned char)(sum_r / blurArea); + dst[1] = (unsigned char)(sum_g / blurArea); + dst[2] = (unsigned char)(sum_b / blurArea); if ( src_alpha ) - dst_alpha[y * M_IMGDATA->m_width] = sum_a / blurArea; + dst_alpha[y * M_IMGDATA->m_width] = (unsigned char)(sum_a / blurArea); // Now average the values of the rest of the pixels by just moving the // blur radius box along the row @@ -851,11 +857,11 @@ wxImage wxImage::BlurHorizontal(int blurRadius) // Save off the averaged data dst = dst_data + x*3 + y*M_IMGDATA->m_width; - dst[0] = sum_r / blurArea; - dst[1] = sum_g / blurArea; - dst[2] = sum_b / blurArea; + dst[0] = (unsigned char)(sum_r / blurArea); + dst[1] = (unsigned char)(sum_g / blurArea); + dst[2] = (unsigned char)(sum_b / blurArea); if ( src_alpha ) - dst_alpha[x + y * M_IMGDATA->m_width] = sum_a / blurArea; + dst_alpha[x + y * M_IMGDATA->m_width] = (unsigned char)(sum_a / blurArea); } } @@ -927,11 +933,11 @@ wxImage wxImage::BlurVertical(int blurRadius) } dst = dst_data + x*3; - dst[0] = sum_r / blurArea; - dst[1] = sum_g / blurArea; - dst[2] = sum_b / blurArea; + dst[0] = (unsigned char)(sum_r / blurArea); + dst[1] = (unsigned char)(sum_g / blurArea); + dst[2] = (unsigned char)(sum_b / blurArea); if ( src_alpha ) - dst_alpha[x] = sum_a / blurArea; + dst_alpha[x] = (unsigned char)(sum_a / blurArea); // Now average the values of the rest of the pixels by just moving the // box along the column from top to bottom @@ -969,11 +975,11 @@ wxImage wxImage::BlurVertical(int blurRadius) // Save off the averaged data dst = dst_data + (x + y * M_IMGDATA->m_width) * 3; - dst[0] = sum_r / blurArea; - dst[1] = sum_g / blurArea; - dst[2] = sum_b / blurArea; + dst[0] = (unsigned char)(sum_r / blurArea); + dst[1] = (unsigned char)(sum_g / blurArea); + dst[2] = (unsigned char)(sum_b / blurArea); if ( src_alpha ) - dst_alpha[x + y * M_IMGDATA->m_width] = sum_a / blurArea; + dst_alpha[x + y * M_IMGDATA->m_width] = (unsigned char)(sum_a / blurArea); } }