From c7a284c79b1f2f515abef1bc38d390b9ff81b6bc Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 22 Dec 2007 15:52:48 +0000 Subject: [PATCH] fixes to wxImage::ResambleBox() (patch 1843902) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50901 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + src/common/image.cpp | 15 +++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index a955d366ea..9ed01b58af 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -298,6 +298,7 @@ All: All (GUI): - Added wxWindow::GetNextSibling() and GetPrevSibling() +- Improve wximage::ResampleBox() (Mihai Ciocarlie) wxMSW: diff --git a/src/common/image.cpp b/src/common/image.cpp index 8c329c38f5..e739d5c71e 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -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); - // 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; @@ -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) - 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); @@ -584,11 +579,11 @@ wxImage wxImage::ResampleBox(int width, int height) const 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 - 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]; -- 2.45.2