removed alpha channel

This commit is contained in:
Bruno Cabral 2024-06-28 15:31:10 -07:00
parent 5dc41ff29f
commit e10f2d1617
2 changed files with 13 additions and 33 deletions

View File

@ -33,25 +33,29 @@ int main(void)
Image fudesumiImage = LoadImage("resources/fudesumi.png"); Image fudesumiImage = LoadImage("resources/fudesumi.png");
Texture2D fudesumiTexture = LoadTextureFromImage(fudesumiImage); Texture2D fudesumiTexture = LoadTextureFromImage(fudesumiImage);
Image imageAlpha = ImageFromChannel(fudesumiImage, 3);
ImageAlphaMask(&imageAlpha, imageAlpha);
Texture2D textureAlpha = LoadTextureFromImage(imageAlpha);
Image imageRed = ImageFromChannel(fudesumiImage, 0); Image imageRed = ImageFromChannel(fudesumiImage, 0);
ImageAlphaMask(&imageRed, imageAlpha);
Texture2D textureRed = LoadTextureFromImage(imageRed); Texture2D textureRed = LoadTextureFromImage(imageRed);
UnloadImage(imageRed); UnloadImage(imageRed);
Image imageGreen = ImageFromChannel(fudesumiImage, 1); Image imageGreen = ImageFromChannel(fudesumiImage, 1);
ImageAlphaMask(&imageGreen, imageAlpha);
Texture2D textureGreen = LoadTextureFromImage(imageGreen); Texture2D textureGreen = LoadTextureFromImage(imageGreen);
UnloadImage(imageGreen); UnloadImage(imageGreen);
Image imageBlue = ImageFromChannel(fudesumiImage, 2); Image imageBlue = ImageFromChannel(fudesumiImage, 2);
ImageAlphaMask(&imageBlue, imageAlpha);
Texture2D textureBlue = LoadTextureFromImage(imageBlue); Texture2D textureBlue = LoadTextureFromImage(imageBlue);
UnloadImage(imageBlue); UnloadImage(imageBlue);
Image imageAlpha = ImageFromChannel(fudesumiImage, 3);
Texture2D textureAlpha = LoadTextureFromImage(imageAlpha);
UnloadImage(imageAlpha);
Image backgroundImage = GenImageChecked(screenWidth, screenHeight, screenWidth/20, screenHeight/20, ORANGE, YELLOW); Image backgroundImage = GenImageChecked(screenWidth, screenHeight, screenWidth/20, screenHeight/20, ORANGE, YELLOW);
Texture2D backgroundTexture = LoadTextureFromImage(backgroundImage); Texture2D backgroundTexture = LoadTextureFromImage(backgroundImage);
UnloadImage(imageAlpha);
UnloadImage(backgroundImage); UnloadImage(backgroundImage);
SetTargetFPS(60); // Set our game to run at 60 frames-per-second SetTargetFPS(60); // Set our game to run at 60 frames-per-second

View File

@ -1684,32 +1684,29 @@ Image ImageFromChannel(Image image, int selectedChannel)
selectedChannel = 3; selectedChannel = 3;
} }
result.format = PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA; result.format = PIXELFORMAT_UNCOMPRESSED_GRAYSCALE;
result.height = image.height; result.height = image.height;
result.width = image.width; result.width = image.width;
result.mipmaps = 1; result.mipmaps = 1;
unsigned char *pixels = (unsigned char *)RL_CALLOC(image.width * 2 * image.height, sizeof(unsigned char)); // values 0 to 255 unsigned char *pixels = (unsigned char *)RL_CALLOC(image.width * image.height, sizeof(unsigned char)); // values 0 to 255
if (image.format >= PIXELFORMAT_COMPRESSED_DXT1_RGB) TRACELOG(LOG_WARNING, "IMAGE: Pixel data retrieval not supported for compressed image formats"); if (image.format >= PIXELFORMAT_COMPRESSED_DXT1_RGB) TRACELOG(LOG_WARNING, "IMAGE: Pixel data retrieval not supported for compressed image formats");
else else
{ {
for (int i = 0, k = 0; i < image.width*2*image.height; i+=2) for (int i = 0, k = 0; i < image.width * image.height; ++i)
{ {
float imageValue = -1; float imageValue = -1;
float imageAlpha = 0;
switch (image.format) switch (image.format)
{ {
case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE:
{ {
imageValue = (float)((unsigned char *)image.data)[i + selectedChannel]/255.0f; imageValue = (float)((unsigned char *)image.data)[i + selectedChannel]/255.0f;
imageAlpha = 1;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA:
{ {
imageValue = (float)((unsigned char *)image.data)[k + selectedChannel]/255.0f; imageValue = (float)((unsigned char *)image.data)[k + selectedChannel]/255.0f;
imageAlpha = (float)((unsigned char *)image.data)[k + 1]/255.0f;
k += 2; k += 2;
} break; } break;
@ -1733,7 +1730,6 @@ Image ImageFromChannel(Image image, int selectedChannel)
{ {
imageValue = ((pixel & 0b0000000000000001) == 0)? 0.0f : 1.0f; imageValue = ((pixel & 0b0000000000000001) == 0)? 0.0f : 1.0f;
} }
imageAlpha = ((pixel & 0b0000000000000001) == 0)? 0.0f : 1.0f;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R5G6B5: case PIXELFORMAT_UNCOMPRESSED_R5G6B5:
@ -1752,7 +1748,6 @@ Image ImageFromChannel(Image image, int selectedChannel)
{ {
imageValue = (float)(pixel & 0b0000000000011111)*(1.0f/31); imageValue = (float)(pixel & 0b0000000000011111)*(1.0f/31);
} }
imageAlpha = 1;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4:
@ -1775,79 +1770,60 @@ Image ImageFromChannel(Image image, int selectedChannel)
{ {
imageValue = (float)(pixel & 0b0000000000001111)*(1.0f/15); imageValue = (float)(pixel & 0b0000000000001111)*(1.0f/15);
} }
imageAlpha = (float)(pixel & 0b0000000000001111)*(1.0f/15);
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8:
{ {
imageValue = (float)((unsigned char *)image.data)[k + selectedChannel]/255.0f; imageValue = (float)((unsigned char *)image.data)[k + selectedChannel]/255.0f;
imageAlpha = (float)((unsigned char *)image.data)[k + 3]/255.0f;
k += 4; k += 4;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R8G8B8: case PIXELFORMAT_UNCOMPRESSED_R8G8B8:
{ {
imageValue = (float)((unsigned char *)image.data)[k + selectedChannel]/255.0f; imageValue = (float)((unsigned char *)image.data)[k + selectedChannel]/255.0f;
imageAlpha = 1;
k += 3; k += 3;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R32: case PIXELFORMAT_UNCOMPRESSED_R32:
{ {
imageValue = ((float *)image.data)[k]; imageValue = ((float *)image.data)[k];
imageAlpha = 1;
k += 1; k += 1;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R32G32B32: case PIXELFORMAT_UNCOMPRESSED_R32G32B32:
{ {
imageValue = ((float *)image.data)[k + selectedChannel]; imageValue = ((float *)image.data)[k + selectedChannel];
imageAlpha = 1;
k += 3; k += 3;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: case PIXELFORMAT_UNCOMPRESSED_R32G32B32A32:
{ {
imageValue = ((float *)image.data)[k + selectedChannel]; imageValue = ((float *)image.data)[k + selectedChannel];
imageAlpha = ((float *)image.data)[k + 3];
k += 4; k += 4;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R16: case PIXELFORMAT_UNCOMPRESSED_R16:
{ {
imageValue = HalfToFloat(((unsigned short *)image.data)[k]); imageValue = HalfToFloat(((unsigned short *)image.data)[k]);
imageAlpha = 1;
k += 1; k += 1;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R16G16B16: case PIXELFORMAT_UNCOMPRESSED_R16G16B16:
{ {
imageValue = HalfToFloat(((unsigned short *)image.data)[k+selectedChannel]); imageValue = HalfToFloat(((unsigned short *)image.data)[k+selectedChannel]);
imageAlpha = 1;
k += 3; k += 3;
} break; } break;
case PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: case PIXELFORMAT_UNCOMPRESSED_R16G16B16A16:
{ {
imageValue = HalfToFloat(((unsigned short *)image.data)[k + selectedChannel]); imageValue = HalfToFloat(((unsigned short *)image.data)[k + selectedChannel]);
imageAlpha = HalfToFloat(((unsigned short *)image.data)[k + 3]);
k += 4; k += 4;
} break; } break;
default: break; default: break;
} }
// verify threshold pixels[i] = imageValue * 255;
unsigned char resultValue = 0;
unsigned char resultAlpha = 0;
resultValue = imageValue * 255;
if (imageAlpha)
{
resultAlpha = 255;
}
pixels[i] = resultValue;
pixels[i + 1] = resultAlpha;
} }
} }