diff options
author | Christian C <cc@localhost> | 2025-03-06 16:05:50 -0800 |
---|---|---|
committer | Christian C <cc@localhost> | 2025-03-06 16:05:50 -0800 |
commit | 45171a3870915571c2bae4466a59eb2ebdf42b93 (patch) | |
tree | 9d7e7c12af1a40f9c969f59f3cc65550b0773f8e /include/snippets/raylib_block.c | |
parent | 6d46ed36bcad62db89af29512b4ca5f4fa7c423a (diff) |
Modularize Visual UX
Diffstat (limited to 'include/snippets/raylib_block.c')
-rw-r--r-- | include/snippets/raylib_block.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/include/snippets/raylib_block.c b/include/snippets/raylib_block.c new file mode 100644 index 0000000..ef81fd2 --- /dev/null +++ b/include/snippets/raylib_block.c @@ -0,0 +1,93 @@ + //----------------------------------------------- + //-RAYLIB-INIT----------------------------------- + //----------------------------------------------- + SetTraceLogLevel(LOG_ERROR); + SetConfigFlags(FLAG_WINDOW_RESIZABLE); + const char* gui_title = "Image Manip - Useful for segmentations!"; + InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, gui_title); + + //----------------------------------------------- + // (When treating this as RGBA, last bits should ensure opaque) + // This assumes 4096 (2^12) > labels + for (size_t y = 0; y < height; y++) { + for (size_t x = 0; x < width; x++) { + /// RGBA channels: Move labels to RGB + masks[x + y*width] <<= 4; + masks[x + y*width] |= 0x000F; + } + } + //----------------------------------------------- + + //----------------------------------------------- + //-RAYLIB-IMAGE-STRUCTURING---------------------- + //----------------------------------------------- + Image RaylibImage; + RaylibImage.width = width; + RaylibImage.height = height; + RaylibImage.mipmaps = 1; + // Use Contiguous Labels + RaylibImage.data = masks; + RaylibImage.format = PIXELFORMAT_UNCOMPRESSED_R4G4B4A4; + //----------------------------------------------- + + // Image to a Texture + Texture2D RaylibTexture = LoadTextureFromImage(RaylibImage); + + // Scale the image to the viewport + /// Source Rectangle: Original Size + Rectangle sourceRec = { 0.0f, 0.0f, (float)width, (float)height }; + /// Destination Rectangle: Transformed Size + Rectangle destRec = { 0.0f, 0.0f, (float)SCREEN_WIDTH, (float)(SCREEN_HEIGHT-OFFSET) }; + /// Location to begin drawing + Vector2 origin = { (float)0, (float)-OFFSET }; + + // Raylib boilerplate + SetTargetFPS(60); + Camera2D camera = { 0 }; + camera.zoom = 1.0f; + + // GUI Loop + while (!WindowShouldClose()) { + //----------------------------------------------- + //-DRAWING--------------------------------------- + //----------------------------------------------- + BeginDrawing(); + ClearBackground(RAYWHITE); + BeginMode2D(camera); + EndMode2D(); + DrawText("Image Manip", 0, 0, OFFSET, DARKGRAY); + DrawTexturePro(RaylibTexture, sourceRec, destRec, origin, (float)0, + RAYWHITE); + /* + uint32_t x = 0x49, y = 0x4A; + uint32_t dx = 0x69 - x, dy = 0x6E - y; + x = (SCREEN_WIDTH*x)/width; + y = SCREEN_HEIGHT-((SCREEN_HEIGHT-OFFSET)*y)/height; + dx = (SCREEN_WIDTH*dx)/width; + dy = SCREEN_HEIGHT-((SCREEN_HEIGHT-OFFSET)*dy)/height; + DrawRectangleGradientH(x, y, dx, dy, BLUE, PURPLE); + */ + EndDrawing(); + //----------------------------------------------- + } + + //----------------------------------------------- + //-SAVE-MASK-AS-BINARY-AND-PNG------------------- + //----------------------------------------------- + if (masks != NULL) { + for (size_t y = 0; y < height; y++) { + for (size_t x = 0; x < width; x++) { + /// Restore labels from RGBA + masks[x + y*width] &= 0xFFF0; + masks[x + y*width] >>= 4; + } + } + struct bitmap_t* bitmap = uint16_to_bitmap(masks, width, height); + if (bitmap != NULL) { + save_png(bitmap, png_file); + free(bitmap); + } + write_array(bin_file, masks, width*height*sizeof(uint16_t)); + free(masks); + } + CloseWindow(); |