]> git.saurik.com Git - wxWidgets.git/commitdiff
fixes to wxImage::ResambleBox() (patch 1843902)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Dec 2007 15:52:48 +0000 (15:52 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Dec 2007 15:52:48 +0000 (15:52 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50901 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/common/image.cpp

index a955d366ea0e3b4919000dc32258c83808c55c06..9ed01b58af043000c09e1b2f9f4a7ae5ee13d1f3 100644 (file)
@@ -298,6 +298,7 @@ All:
 All (GUI):
 
 - Added wxWindow::GetNextSibling() and GetPrevSibling()
 All (GUI):
 
 - Added wxWindow::GetNextSibling() and GetPrevSibling()
+- Improve wximage::ResampleBox() (Mihai Ciocarlie)
 
 wxMSW:
 
 
 wxMSW:
 
index 8c329c38f5ba8f9dd9315ad5a2965e403f88ce29..e739d5c71e09b2a1e92a59d1e989fa7a4a2d7fff 100644 (file)
@@ -538,13 +538,8 @@ wxImage wxImage::ResampleBox(int width, int height) const
     const int scale_factor_x_2 = (int)(scale_factor_x / 2);
     const int scale_factor_y_2 = (int)(scale_factor_y / 2);
 
     const int scale_factor_x_2 = (int)(scale_factor_x / 2);
     const int scale_factor_y_2 = (int)(scale_factor_y / 2);
 
-    // If we want good-looking results we need to pre-blur the image a bit first
-    wxImage src_image(*this);
-    src_image = src_image.BlurHorizontal(scale_factor_x_2);
-    src_image = src_image.BlurVertical(scale_factor_y_2);
-
-    unsigned char* src_data = src_image.GetData();
-    unsigned char* src_alpha = src_image.GetAlpha();
+    unsigned char* src_data = M_IMGDATA->m_data;
+    unsigned char* src_alpha = M_IMGDATA->m_alpha;
     unsigned char* dst_data = ret_image.GetData();
     unsigned char* dst_alpha = NULL;
 
     unsigned char* dst_data = ret_image.GetData();
     unsigned char* dst_alpha = NULL;
 
@@ -576,7 +571,7 @@ wxImage wxImage::ResampleBox(int width, int height) const
                   j++ )
             {
                 // We don't care to average pixels that don't exist (edges)
                   j++ )
             {
                 // We don't care to average pixels that don't exist (edges)
-                if ( j < 0 || j > M_IMGDATA->m_height )
+                if ( j < 0 || j > M_IMGDATA->m_height - 1 )
                     continue;
 
                 for ( int i = int(src_x - scale_factor_x/2.0 + 1);
                     continue;
 
                 for ( int i = int(src_x - scale_factor_x/2.0 + 1);
@@ -584,11 +579,11 @@ wxImage wxImage::ResampleBox(int width, int height) const
                       i++ )
                 {
                     // Don't average edge pixels
                       i++ )
                 {
                     // Don't average edge pixels
-                    if ( i < 0 || i > M_IMGDATA->m_width )
+                    if ( i < 0 || i > M_IMGDATA->m_width - 1 )
                         continue;
 
                     // Calculate the actual index in our source pixels
                         continue;
 
                     // Calculate the actual index in our source pixels
-                    src_pixel_index = src_y * M_IMGDATA->m_width + src_x;
+                    src_pixel_index = j * M_IMGDATA->m_width + i;
 
                     sum_r += src_data[src_pixel_index * 3 + 0];
                     sum_g += src_data[src_pixel_index * 3 + 1];
 
                     sum_r += src_data[src_pixel_index * 3 + 0];
                     sum_g += src_data[src_pixel_index * 3 + 1];