summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRay <[email protected]>2019-08-07 00:28:05 +0200
committerRay <[email protected]>2019-08-07 00:28:05 +0200
commit2a913b6587d60dab64c3b81019990e6872a9ac75 (patch)
tree375ec08ac3baf44bacd5fe5bf886f785faf4024b /src
parent042499188c55030cb675df2ac135cf8b71e841dd (diff)
downloadraylib-2a913b6587d60dab64c3b81019990e6872a9ac75.tar.gz
raylib-2a913b6587d60dab64c3b81019990e6872a9ac75.zip
ADDED: GetImageAlphaBorder()
Diffstat (limited to 'src')
-rw-r--r--src/raylib.h1
-rw-r--r--src/textures.c33
2 files changed, 34 insertions, 0 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 798d6d89..dd3ef86c 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1095,6 +1095,7 @@ RLAPI void UnloadTexture(Texture2D texture);
RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM)
RLAPI Color *GetImageData(Image image); // Get pixel data from image as a Color struct array
RLAPI Vector4 *GetImageDataNormalized(Image image); // Get pixel data from image as Vector4 array (float normalized)
+RLAPI Rectangle GetImageAlphaBorder(Image image); // Get image alpha border rectangle
RLAPI int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes (image or texture)
RLAPI Image GetTextureData(Texture2D texture); // Get pixel data from GPU texture and return an Image
RLAPI Image GetScreenData(void); // Get pixel data from screen buffer and return an Image (screenshot)
diff --git a/src/textures.c b/src/textures.c
index 18021352..a25a23ab 100644
--- a/src/textures.c
+++ b/src/textures.c
@@ -680,6 +680,37 @@ Vector4 *GetImageDataNormalized(Image image)
return pixels;
}
+// Get image alpha border rectangle
+Rectangle GetImageAlphaBorder(Image image)
+{
+ Color *pixels = GetImageData(image);
+
+ int xMin = 65536; // Define a big enough number
+ int xMax = 0;
+ int yMin = 65536;
+ int yMax = 0;
+
+ for (int y = 0; y < image->height; y++)
+ {
+ for (int x = 0; x < image->width; x++)
+ {
+ if (pixels[y*image->width + x].a > (unsigned char)(threshold*255.0f))
+ {
+ if (x < xMin) xMin = x;
+ if (x > xMax) xMax = x;
+ if (y < yMin) yMin = y;
+ if (y > yMax) yMax = y;
+ }
+ }
+ }
+
+ Rectangle crop = { xMin, yMin, (xMax + 1) - xMin, (yMax + 1) - yMin };
+
+ RL_FREE(pixels);
+
+ return crop;
+}
+
// Get pixel data size in bytes (image or texture)
// NOTE: Size depends on pixel format
int GetPixelDataSize(int width, int height, int format)
@@ -894,7 +925,9 @@ Image ImageFromImage(Image image, Rectangle rec)
{
Image result = ImageCopy(image);
+#if defined(SUPPORT_IMAGE_MANIPULATION)
ImageCrop(&result, rec);
+#endif
return result;
}