From 2536bea379387e525e3107ee07355292ee87a566 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 1 Jun 2018 00:53:40 +0200 Subject: [PATCH] Added: ImageResizeCanvas() -WIP- Added note idea on ImageFormat() for future redesign (to support 16bit-32bit pixel-formats) --- src/raylib.h | 5 +++-- src/textures.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/raylib.h b/src/raylib.h index e83650e6..2659d70d 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -912,8 +912,9 @@ RLAPI void ImageAlphaClear(Image *image, Color color, float threshold); RLAPI void ImageAlphaCrop(Image *image, float threshold); // Crop image depending on alpha value RLAPI void ImageAlphaPremultiply(Image *image); // Premultiply alpha channel RLAPI void ImageCrop(Image *image, Rectangle crop); // Crop an image to a defined rectangle -RLAPI void ImageResize(Image *image, int newWidth, int newHeight); // Resize and image (bilinear filtering) -RLAPI void ImageResizeNN(Image *image,int newWidth,int newHeight); // Resize and image (Nearest-Neighbor scaling algorithm) +RLAPI void ImageResize(Image *image, int newWidth, int newHeight); // Resize image (bilinear filtering) +RLAPI void ImageResizeNN(Image *image, int newWidth,int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) +RLAPI void ImageResizeCanvas(Image *image, int newWidth,int newHeight, int anchor, Color color); // Resize canvas, using anchor point and color filling RLAPI void ImageMipmaps(Image *image); // Generate all mipmap levels for a provided image RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) RLAPI Image ImageText(const char *text, int fontSize, Color color); // Create an image from text (default font) diff --git a/src/textures.c b/src/textures.c index 0aac923f..239b7cf5 100644 --- a/src/textures.c +++ b/src/textures.c @@ -664,6 +664,7 @@ void ImageFormat(Image *image, int newFormat) if ((image->format < COMPRESSED_DXT1_RGB) && (newFormat < COMPRESSED_DXT1_RGB)) { Color *pixels = GetImageData(*image); + //Vector4 *pixels = GetImageDataNormalized(*image); // TODO: Support 8->32bit channels free(image->data); // WARNING! We loose mipmaps data --> Regenerated at the end... image->data = NULL; @@ -1066,6 +1067,20 @@ void ImageResizeNN(Image *image,int newWidth,int newHeight) free(pixels); } +// Resize canvas, using anchor point and color filling +void ImageResizeCanvas(Image *image, int newWidth,int newHeight, int anchor, Color color) +{ + Image imTemp = GenImageColor(newWidth, newHeight, color); + Rectangle rec = { 0, 0, image->width, image->height }; + + // TODO: consider anchor properly + + ImageDraw(&imTemp, *image, rec, rec); + ImageFormat(&imTemp, image->format); + UnloadImage(*image); + *image = imTemp; +} + // Generate all mipmap levels for a provided image // NOTE 1: Supports POT and NPOT images // NOTE 2: image.data is scaled to include mipmap levels