From 921c65ed3d889117c600387cebb0bce2470cff8e Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sun, 22 May 2005 11:33:00 +0000 Subject: [PATCH] Fix to preserve alpha channel in Rotate90 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34240 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/image.cpp | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/common/image.cpp b/src/common/image.cpp index 3514fd761b..cf35689226 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -498,25 +498,53 @@ wxImage wxImage::Rotate90( bool clockwise ) const wxCHECK_MSG( data, image, wxT("unable to create image") ); + unsigned char *source_data = M_IMGDATA->m_data; + unsigned char *target_data; + unsigned char *alpha_data = 0 ; + 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 + { + source_alpha = M_IMGDATA->m_alpha ; + if ( source_alpha ) + { + image.SetAlpha() ; + alpha_data = image.GetAlpha() ; + } + } long height = M_IMGDATA->m_height; long width = M_IMGDATA->m_width; - unsigned char *source_data = M_IMGDATA->m_data; - unsigned char *target_data; - for (long j = 0; j < height; j++) { for (long i = 0; i < width; i++) { if (clockwise) + { target_data = data + (((i+1)*height) - j - 1)*3; + if(source_alpha) + target_alpha = alpha_data + (((i+1)*height) - j - 1); + } else + { target_data = data + ((height*(width-1)) + j - (i*height))*3; + if(source_alpha) + target_alpha = alpha_data + ((height*(width-1)) + j - (i*height)); + } memcpy( target_data, source_data, 3 ); source_data += 3; + + if(source_alpha) + { + memcpy( target_alpha, source_alpha, 1 ); + source_alpha += 1; + } } } -- 2.45.2