From a45d2ecbc1b1aaec4f14669572d9d422c0f80596 Mon Sep 17 00:00:00 2001 From: cristy Date: Wed, 24 Aug 2011 13:17:19 +0000 Subject: [PATCH] --- MagickCore/shear.c | 117 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 28 deletions(-) diff --git a/MagickCore/shear.c b/MagickCore/shear.c index 68e4f290d..5f8114668 100644 --- a/MagickCore/shear.c +++ b/MagickCore/shear.c @@ -1111,12 +1111,10 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, width=tile_width; if ((tile_x+(ssize_t) tile_width) > (ssize_t) image->columns) - width=(size_t) (tile_width-(tile_x+tile_width- - image->columns)); + width=(size_t) (tile_width-(tile_x+tile_width-image->columns)); height=tile_height; if ((tile_y+(ssize_t) tile_height) > (ssize_t) image->rows) - height=(size_t) (tile_height-(tile_y+tile_height- - image->rows)); + height=(size_t) (tile_height-(tile_y+tile_height-image->rows)); p=GetCacheViewVirtualPixels(image_view,tile_x,tile_y,width,height, exception); if (p == (const Quantum *) NULL) @@ -1143,10 +1141,32 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, tile_pixels=p+((height-1)*width+y)*GetPixelChannels(image); for (x=0; x < (ssize_t) height; x++) { - SetPixelRed(rotate_image,GetPixelRed(image,tile_pixels),q); - SetPixelGreen(rotate_image,GetPixelGreen(image,tile_pixels),q); - SetPixelBlue(rotate_image,GetPixelBlue(image,tile_pixels),q); - SetPixelAlpha(rotate_image,GetPixelAlpha(image,tile_pixels),q); + register ssize_t + i; + + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel + channel; + + PixelTrait + rotate_traits, + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + channel=GetPixelChannelMapChannel(image,(PixelChannel) i); + rotate_traits=GetPixelChannelMapTraits(rotate_image,channel); + if (rotate_traits == UndefinedPixelTrait) + continue; + if ((rotate_traits & CopyPixelTrait) != 0) + { + q[channel]=tile_pixels[i]; + continue; + } + q[channel]=tile_pixels[i]; + } tile_pixels-=width*GetPixelChannels(image); q+=GetPixelChannels(rotate_image); } @@ -1198,10 +1218,9 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, if (status == MagickFalse) continue; - p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1, - exception); - q=QueueCacheViewAuthenticPixels(rotate_view,0,(ssize_t) (image->rows- - y-1),image->columns,1,exception); + p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception); + q=QueueCacheViewAuthenticPixels(rotate_view,0,(ssize_t) (image->rows-y- + 1),image->columns,1,exception); if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL)) { status=MagickFalse; @@ -1210,11 +1229,33 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, q+=GetPixelChannels(rotate_image)*image->columns; for (x=0; x < (ssize_t) image->columns; x++) { + register ssize_t + i; + q-=GetPixelChannels(rotate_image); - SetPixelRed(rotate_image,GetPixelRed(image,p),q); - SetPixelGreen(rotate_image,GetPixelGreen(image,p),q); - SetPixelBlue(rotate_image,GetPixelBlue(image,p),q); - SetPixelAlpha(rotate_image,GetPixelAlpha(image,p),q); + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel + channel; + + PixelTrait + rotate_traits, + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + channel=GetPixelChannelMapChannel(image,(PixelChannel) i); + rotate_traits=GetPixelChannelMapTraits(rotate_image,channel); + if (rotate_traits == UndefinedPixelTrait) + continue; + if ((rotate_traits & CopyPixelTrait) != 0) + { + q[channel]=p[i]; + continue; + } + q[channel]=p[i]; + } p+=GetPixelChannels(image); } sync=SyncCacheViewAuthenticPixels(rotate_view,exception); @@ -1280,14 +1321,12 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, width=tile_width; if ((tile_x+(ssize_t) tile_width) > (ssize_t) image->columns) - width=(size_t) (tile_width-(tile_x+tile_width- - image->columns)); + width=(size_t) (tile_width-(tile_x+tile_width-image->columns)); height=tile_height; if ((tile_y+(ssize_t) tile_height) > (ssize_t) image->rows) - height=(size_t) (tile_height-(tile_y+tile_height- - image->rows)); - p=GetCacheViewVirtualPixels(image_view,tile_x,tile_y,width, - height,exception); + height=(size_t) (tile_height-(tile_y+tile_height-image->rows)); + p=GetCacheViewVirtualPixels(image_view,tile_x,tile_y,width,height, + exception); if (p == (const Quantum *) NULL) { status=MagickFalse; @@ -1301,8 +1340,8 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, register ssize_t x; - q=QueueCacheViewAuthenticPixels(rotate_view,tile_y,(ssize_t) - (y+rotate_image->rows-(tile_x+width)),height,1,exception); + q=QueueCacheViewAuthenticPixels(rotate_view,tile_y,(ssize_t) (y+ + rotate_image->rows-(tile_x+width)),height,1,exception); if (q == (const Quantum *) NULL) { status=MagickFalse; @@ -1311,10 +1350,32 @@ static Image *IntegralRotateImage(const Image *image,size_t rotations, tile_pixels=p+((width-1)-y)*GetPixelChannels(image); for (x=0; x < (ssize_t) height; x++) { - SetPixelRed(rotate_image,GetPixelRed(image,tile_pixels),q); - SetPixelGreen(rotate_image,GetPixelGreen(image,tile_pixels),q); - SetPixelBlue(rotate_image,GetPixelBlue(image,tile_pixels),q); - SetPixelAlpha(rotate_image,GetPixelAlpha(image,tile_pixels),q); + register ssize_t + i; + + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel + channel; + + PixelTrait + rotate_traits, + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + channel=GetPixelChannelMapChannel(image,(PixelChannel) i); + rotate_traits=GetPixelChannelMapTraits(rotate_image,channel); + if (rotate_traits == UndefinedPixelTrait) + continue; + if ((rotate_traits & CopyPixelTrait) != 0) + { + q[channel]=tile_pixels[i]; + continue; + } + q[channel]=tile_pixels[i]; + } tile_pixels+=width*GetPixelChannels(image); q+=GetPixelChannels(rotate_image); } -- 2.40.0