From 1f04937e1dc4f71c14074edd15de9098a8312655 Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Wed, 27 Jun 2007 11:41:07 +0000 Subject: INTEGRATION: CWS basebmp01 (1.3.20); FILE MERGED 2007/05/22 09:59:17 thb 1.3.20.1: #147378# Added support for foreign formats (via GenericColorImageAccessor); fixed typos in CompositeIterator and StridedArrayIterator; fixed comparisons for (Packed)PixelIterator and StridedArrayIterator (which got negative strides wrong); avoiding unnecessary copying in scale_image() now; cleaned up bitmapdevice.cxx from cruft/ad hoc debug code; made unit tests run again --- basebmp/inc/basebmp/scaleimage.hxx | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'basebmp') diff --git a/basebmp/inc/basebmp/scaleimage.hxx b/basebmp/inc/basebmp/scaleimage.hxx index dead43f0456e..d0fae782a6ea 100644 --- a/basebmp/inc/basebmp/scaleimage.hxx +++ b/basebmp/inc/basebmp/scaleimage.hxx @@ -4,9 +4,9 @@ * * $RCSfile: scaleimage.hxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: thb $ $Date: 2006-07-28 12:43:20 $ + * last change: $Author: hr $ $Date: 2007-06-27 12:41:07 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -39,6 +39,7 @@ #include #include +#include #include #include @@ -119,6 +120,10 @@ void scaleLine( SourceIter s_begin, @param d_acc Destination accessor + + @param bMustCopy + When true, scaleImage always copies source, even when doing 1:1 + copy */ template< class SourceIter, class SourceAcc, class DestIter, class DestAcc > @@ -127,7 +132,8 @@ void scaleImage( SourceIter s_begin, SourceAcc s_acc, DestIter d_begin, DestIter d_end, - DestAcc d_acc ) + DestAcc d_acc, + bool bMustCopy=false ) { const int src_width ( s_end.x - s_begin.x ); const int src_height( s_end.y - s_begin.y ); @@ -135,6 +141,16 @@ void scaleImage( SourceIter s_begin, const int dest_width ( d_end.x - d_begin.x ); const int dest_height( d_end.y - d_begin.y ); + if( !bMustCopy && + src_width == dest_width && + src_height == dest_height ) + { + // no scaling involved, can simply copy + vigra::copyImage( s_begin, s_end, s_acc, + d_begin, d_acc ); + return; + } + typedef vigra::BasicImage TmpImage; typedef typename TmpImage::traverser TmpImageIter; @@ -166,14 +182,20 @@ void scaleImage( SourceIter s_begin, } /** Scale an image, range tuple version + + @param bMustCopy + When true, scaleImage always copies source, even when doing 1:1 + copy */ template< class SourceIter, class SourceAcc, class DestIter, class DestAcc > inline void scaleImage( vigra::triple const& src, - vigra::triple const& dst ) + vigra::triple const& dst, + bool bMustCopy=false ) { scaleImage(src.first,src.second,src.third, - dst.first,dst.second,dst.third); + dst.first,dst.second,dst.third, + bMustCopy); } } -- cgit v1.2.3