diff --git a/src/zm_image.cpp b/src/zm_image.cpp index 82440aae6..18b93c57b 100644 --- a/src/zm_image.cpp +++ b/src/zm_image.cpp @@ -2352,10 +2352,10 @@ void Image::Rotate( int angle ) if ( colours == ZM_COLOUR_GRAY8 ) { unsigned char *d_ptr; - for ( unsigned int i = new_width-1; i >= 0; i-- ) + for ( unsigned int i = new_width; i > 0; i-- ) { - d_ptr = rotate_buffer+i; - for ( unsigned int j = new_height-1; j >= 0; j-- ) + d_ptr = rotate_buffer+(i-1); + for ( unsigned int j = new_height; j > 0; j-- ) { *d_ptr = *s_ptr++; d_ptr += line_bytes; @@ -2366,10 +2366,10 @@ void Image::Rotate( int angle ) { Rgb* s_rptr = (Rgb*)s_ptr; Rgb* d_rptr; - for ( unsigned int i = new_width-1; i >= 0; i-- ) + for ( unsigned int i = new_width; i > 0; i-- ) { - d_rptr = (Rgb*)(rotate_buffer+(i<<2)); - for ( unsigned int j = new_height-1; j >= 0; j-- ) + d_rptr = (Rgb*)(rotate_buffer+((i-1)<<2)); + for ( unsigned int j = new_height; j > 0; j-- ) { *d_rptr = *s_rptr++; d_rptr += new_width; @@ -2379,10 +2379,10 @@ void Image::Rotate( int angle ) else /* Assume RGB24 */ { unsigned char *d_ptr; - for ( unsigned int i = new_width-1; i >= 0; i-- ) + for ( unsigned int i = new_width; i > 0; i-- ) { - d_ptr = rotate_buffer+(3*i); - for ( unsigned int j = new_height-1; j >= 0; j-- ) + d_ptr = rotate_buffer+((i-1)*3); + for ( unsigned int j = new_height; j > 0; j-- ) { *d_ptr = *s_ptr++; *(d_ptr+1) = *s_ptr++; @@ -2439,10 +2439,10 @@ void Image::Rotate( int angle ) if ( colours == ZM_COLOUR_GRAY8 ) { unsigned char *d_ptr; - for ( unsigned int i = new_width-1; i >= 0; i-- ) + for ( unsigned int i = new_width; i > 0; i-- ) { - d_ptr = rotate_buffer+i; - for ( unsigned int j = new_height-1; j >= 0; j-- ) + d_ptr = rotate_buffer+(i-1); + for ( unsigned int j = new_height; j > 0; j-- ) { s_ptr--; *d_ptr = *s_ptr; @@ -2454,10 +2454,10 @@ void Image::Rotate( int angle ) { Rgb* s_rptr = (Rgb*)s_ptr; Rgb* d_rptr; - for ( int i = new_width-1; i >= 0; i-- ) + for ( unsigned int i = new_width; i > 0; i-- ) { - d_rptr = (Rgb*)(rotate_buffer+(i<<2)); - for ( int j = new_height-1; j >= 0; j-- ) + d_rptr = (Rgb*)(rotate_buffer+((i-1)<<2)); + for ( unsigned int j = new_height; j > 0; j-- ) { s_rptr--; *d_rptr = *s_rptr; @@ -2468,10 +2468,10 @@ void Image::Rotate( int angle ) else /* Assume RGB24 */ { unsigned char *d_ptr; - for ( unsigned int i = new_width-1; i >= 0; i-- ) + for ( unsigned int i = new_width; i > 0; i-- ) { - d_ptr = rotate_buffer+(3*i); - for ( unsigned int j = new_height-1; j >= 0; j-- ) + d_ptr = rotate_buffer+((i-1)*3); + for ( unsigned int j = new_height; j > 0; j-- ) { *(d_ptr+2) = *(--s_ptr); *(d_ptr+1) = *(--s_ptr); diff --git a/src/zm_image.h b/src/zm_image.h index efa34ef67..46c7a031b 100644 --- a/src/zm_image.h +++ b/src/zm_image.h @@ -187,11 +187,12 @@ public: inline void CopyBuffer( const Image &image ) { - if ( image.size != size ) - { - Panic( "Attempt to copy different size image buffers, expected %d, got %d", size, image.size ); - } - (*fptr_imgbufcpy)(buffer, image.buffer, size); + Assign(image); + } + inline Image &operator=( const Image &image ) + { + Assign(image); + return *this; } inline Image &operator=( const unsigned char *new_buffer ) {