From b5174a9990950a75a58451979245b960d0e04f28 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Sun, 7 Jun 2020 12:57:57 +0200 Subject: [PATCH] REVIEWED: ImageCrop() #1218 Further optimization, moving data line-by-line Old optimization left for reference --- src/textures.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/textures.c b/src/textures.c index e7a7d92ef..b93a42846 100644 --- a/src/textures.c +++ b/src/textures.c @@ -794,6 +794,15 @@ void ImageCrop(Image *image, Rectangle crop) unsigned char *croppedData = (unsigned char *)RL_MALLOC(crop.width*crop.height*bytesPerPixel); + // OPTION 1: Move cropped data line-by-line + for (int y = (int)crop.y, offsetSize = 0; y < (int)(crop.y + crop.height); y++) + { + memcpy(croppedData + offsetSize, ((unsigned char *)image->data) + (y*image->width + (int)crop.x)*bytesPerPixel, (int)crop.width*bytesPerPixel); + offsetSize += ((int)crop.width*bytesPerPixel); + } + + /* + // OPTION 2: Move cropped data pixel-by-pixel or byte-by-byte for (int y = (int)crop.y; y < (int)(crop.y + crop.height); y++) { for (int x = (int)crop.x; x < (int)(crop.x + crop.width); x++) @@ -802,6 +811,7 @@ void ImageCrop(Image *image, Rectangle crop) for (int i = 0; i < bytesPerPixel; i++) croppedData[((y - (int)crop.y)*(int)crop.width + (x - (int)crop.x))*bytesPerPixel + i] = ((unsigned char *)image->data)[(y*image->width + x)*bytesPerPixel + i]; } } + */ RL_FREE(image->data); image->data = croppedData;