6e2661f92d
* created ImageFromChannel Adds the possibility to extract a specific channel from an image * naming convention * example window height * removed threshold * removed alpha channel * channel example organization * updated channel example image
107 lines
4.5 KiB
C
107 lines
4.5 KiB
C
/*******************************************************************************************
|
|
*
|
|
* raylib [textures] example - Retrive image channel (mask)
|
|
*
|
|
* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM)
|
|
*
|
|
* Example originally created with raylib 5.1-dev, last time updated with raylib 5.1-dev
|
|
*
|
|
* Example contributed by Bruno Cabral (github.com/brccabral) and reviewed by Ramon Santamaria (@raysan5)
|
|
*
|
|
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
|
* BSD-like license that allows static linking with closed source software
|
|
*
|
|
* Copyright (c) 2024-2024 Bruno Cabral (github.com/brccabral) and Ramon Santamaria (@raysan5)
|
|
*
|
|
********************************************************************************************/
|
|
|
|
#include <raylib.h>
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// Program main entry point
|
|
//------------------------------------------------------------------------------------
|
|
int main(void)
|
|
{
|
|
// Initialization
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
const int screenWidth = 800;
|
|
const int screenHeight = 450;
|
|
|
|
InitWindow(screenWidth, screenHeight, "raylib [textures] example - extract channel from image");
|
|
|
|
Image fudesumiImage = LoadImage("resources/fudesumi.png");
|
|
|
|
Image imageAlpha = ImageFromChannel(fudesumiImage, 3);
|
|
ImageAlphaMask(&imageAlpha, imageAlpha);
|
|
|
|
Image imageRed = ImageFromChannel(fudesumiImage, 0);
|
|
ImageAlphaMask(&imageRed, imageAlpha);
|
|
|
|
Image imageGreen = ImageFromChannel(fudesumiImage, 1);
|
|
ImageAlphaMask(&imageGreen, imageAlpha);
|
|
|
|
Image imageBlue = ImageFromChannel(fudesumiImage, 2);
|
|
ImageAlphaMask(&imageBlue, imageAlpha);
|
|
|
|
Image backgroundImage = GenImageChecked(screenWidth, screenHeight, screenWidth/20, screenHeight/20, ORANGE, YELLOW);
|
|
|
|
Texture2D fudesumiTexture = LoadTextureFromImage(fudesumiImage);
|
|
Texture2D textureAlpha = LoadTextureFromImage(imageAlpha);
|
|
Texture2D textureRed = LoadTextureFromImage(imageRed);
|
|
Texture2D textureGreen = LoadTextureFromImage(imageGreen);
|
|
Texture2D textureBlue = LoadTextureFromImage(imageBlue);
|
|
Texture2D backgroundTexture = LoadTextureFromImage(backgroundImage);
|
|
|
|
UnloadImage(fudesumiImage);
|
|
UnloadImage(imageAlpha);
|
|
UnloadImage(imageRed);
|
|
UnloadImage(imageGreen);
|
|
UnloadImage(imageBlue);
|
|
UnloadImage(backgroundImage);
|
|
|
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
|
|
Rectangle fudesumiRec = {0, 0, fudesumiImage.width, fudesumiImage.height};
|
|
|
|
Rectangle fudesumiPos = {50, 10, fudesumiImage.width*0.8f, fudesumiImage.height*0.8f};
|
|
Rectangle redPos = { 410, 10, fudesumiPos.width / 2, fudesumiPos.height / 2 };
|
|
Rectangle greenPos = { 600, 10, fudesumiPos.width / 2, fudesumiPos.height / 2 };
|
|
Rectangle bluePos = { 410, 230, fudesumiPos.width / 2, fudesumiPos.height / 2 };
|
|
Rectangle alphaPos = { 600, 230, fudesumiPos.width / 2, fudesumiPos.height / 2 };
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
// Main game loop
|
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
{
|
|
// Draw
|
|
//----------------------------------------------------------------------------------
|
|
BeginDrawing();
|
|
|
|
DrawTexture(backgroundTexture, 0, 0, WHITE);
|
|
DrawTexturePro(fudesumiTexture, fudesumiRec, fudesumiPos, (Vector2) {0, 0}, 0, WHITE);
|
|
|
|
DrawTexturePro(textureRed, fudesumiRec, redPos, (Vector2) {0, 0}, 0, RED);
|
|
DrawTexturePro(textureGreen, fudesumiRec, greenPos, (Vector2) {0, 0}, 0, GREEN);
|
|
DrawTexturePro(textureBlue, fudesumiRec, bluePos, (Vector2) {0, 0}, 0, BLUE);
|
|
DrawTexturePro(textureAlpha, fudesumiRec, alphaPos, (Vector2) {0, 0}, 0, WHITE);
|
|
|
|
EndDrawing();
|
|
//----------------------------------------------------------------------------------
|
|
}
|
|
|
|
// De-Initialization
|
|
//--------------------------------------------------------------------------------------
|
|
UnloadTexture(backgroundTexture);
|
|
UnloadTexture(fudesumiTexture);
|
|
UnloadTexture(textureRed);
|
|
UnloadTexture(textureGreen);
|
|
UnloadTexture(textureBlue);
|
|
UnloadTexture(textureAlpha);
|
|
CloseWindow(); // Close window and OpenGL context
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
return 0;
|
|
}
|