Selaa lähdekoodia

REDESIGNED: ImageResize(), optimized #1218

pull/1280/head
raysan5 4 vuotta sitten
vanhempi
commit
bfa6544030
1 muutettua tiedostoa jossa 39 lisäystä ja 14 poistoa
  1. +39
    -14
      src/textures.c

+ 39
- 14
src/textures.c Näytä tiedosto

@ -1313,25 +1313,50 @@ void ImageResize(Image *image, int newWidth, int newHeight)
{
// Security check to avoid program crash
if ((image->data == NULL) || (image->width == 0) || (image->height == 0)) return;
bool fastPath = true;
if ((image->format != UNCOMPRESSED_GRAYSCALE) && (image->format != UNCOMPRESSED_GRAY_ALPHA) && (image->format != UNCOMPRESSED_R8G8B8) && (image->format != UNCOMPRESSED_R8G8B8A8)) fastPath = true;
if (fastPath)
{
int bytesPerPixel = GetPixelDataSize(1, 1, image->format);
unsigned char *output = RL_MALLOC(newWidth*newHeight*bytesPerPixel);
switch (image->format)
{
case UNCOMPRESSED_GRAYSCALE: stbir_resize_uint8((unsigned char *)image->data, image->width, image->height, 0, output, newWidth, newHeight, 0, 1); break;
case UNCOMPRESSED_GRAY_ALPHA: stbir_resize_uint8((unsigned char *)image->data, image->width, image->height, 0, output, newWidth, newHeight, 0, 2); break;
case UNCOMPRESSED_R8G8B8: stbir_resize_uint8((unsigned char *)image->data, image->width, image->height, 0, output, newWidth, newHeight, 0, 3); break;
case UNCOMPRESSED_R8G8B8A8: stbir_resize_uint8((unsigned char *)image->data, image->width, image->height, 0, output, newWidth, newHeight, 0, 4); break;
default: break;
}
// Get data as Color pixels array to work with it
Color *pixels = GetImageData(*image);
Color *output = (Color *)RL_MALLOC(newWidth*newHeight*sizeof(Color));
RL_FREE(image->data);
image->data = output;
image->width = newWidth;
image->height = newHeight;
}
else
{
// Get data as Color pixels array to work with it
Color *pixels = GetImageData(*image);
Color *output = (Color *)RL_MALLOC(newWidth*newHeight*sizeof(Color));
// NOTE: Color data is casted to (unsigned char *), there shouldn't been any problem...
stbir_resize_uint8((unsigned char *)pixels, image->width, image->height, 0, (unsigned char *)output, newWidth, newHeight, 0, 4);
// NOTE: Color data is casted to (unsigned char *), there shouldn't been any problem...
stbir_resize_uint8((unsigned char *)pixels, image->width, image->height, 0, (unsigned char *)output, newWidth, newHeight, 0, 4);
int format = image->format;
RL_FREE(pixels);
RL_FREE(image->data);
int format = image->format;
RL_FREE(pixels);
RL_FREE(image->data);
image->data = output;
image->width = newWidth;
image->height = newHeight;
image->format = UNCOMPRESSED_R8G8B8A8;
image->data = output;
image->width = newWidth;
image->height = newHeight;
image->format = UNCOMPRESSED_R8G8B8A8;
ImageFormat(image, format); // Reformat 32bit RGBA image to original format
ImageFormat(image, format); // Reformat 32bit RGBA image to original format
}
}
// Resize and image to new size using Nearest-Neighbor scaling algorithm

Ladataan…
Peruuta
Tallenna