summaryrefslogtreecommitdiffhomepage
path: root/src/textures.c
diff options
context:
space:
mode:
authorraysan5 <[email protected]>2020-06-07 12:57:57 +0200
committerraysan5 <[email protected]>2020-06-07 12:57:57 +0200
commitb5174a9990950a75a58451979245b960d0e04f28 (patch)
tree85f142814a92aab3090eb04421522d968e3a5c04 /src/textures.c
parentb7d53ce3145e1750e2ed54ed456b43b12fb083ab (diff)
downloadraylib-b5174a9990950a75a58451979245b960d0e04f28.tar.gz
raylib-b5174a9990950a75a58451979245b960d0e04f28.zip
REVIEWED: ImageCrop() #1218
Further optimization, moving data line-by-line Old optimization left for reference
Diffstat (limited to 'src/textures.c')
-rw-r--r--src/textures.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/textures.c b/src/textures.c
index e7a7d92e..b93a4284 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;