diff --git a/plugins/builtin/romfs/lang/en_US.json b/plugins/builtin/romfs/lang/en_US.json index 9eaa100d3..1453d0124 100644 --- a/plugins/builtin/romfs/lang/en_US.json +++ b/plugins/builtin/romfs/lang/en_US.json @@ -197,6 +197,8 @@ "hex.builtin.minimap_visualizer.byte_type": "Byte Type", "hex.builtin.minimap_visualizer.highlights": "Highlights", "hex.builtin.minimap_visualizer.byte_magnitude": "Byte Magnitude", + "hex.builtin.minimap_visualizer.rgba8": "RGBA8 Colors", + "hex.builtin.minimap_visualizer.rgb565": "RGB565 Colors", "hex.builtin.nodes.arithmetic": "Arithmetic", "hex.builtin.nodes.arithmetic.add": "Addition", "hex.builtin.nodes.arithmetic.add.header": "Add", diff --git a/plugins/builtin/source/content/minimap_visualizers.cpp b/plugins/builtin/source/content/minimap_visualizers.cpp index 416970040..66bdfbfd1 100644 --- a/plugins/builtin/source/content/minimap_visualizers.cpp +++ b/plugins/builtin/source/content/minimap_visualizers.cpp @@ -88,6 +88,30 @@ namespace hex::plugin::builtin { } } + using ColorFunc = ImColor(*)(std::span data); + void colorMinimapVisualizer(u64, std::span data, std::vector &output, size_t colorSize, ColorFunc func) { + size_t count = data.size() / colorSize; + for (size_t i = 0; i < count; i += 1) { + ImColor color = func(data.subspan(i * colorSize)); + output.push_back(color); + } + } + + void rgba8MiniMapVisualizer(u64 address, std::span data, std::vector &output) { + colorMinimapVisualizer(address, data, output, 4, [](std::span subData) -> ImColor { + return ImColor(subData[0], subData[1], subData[2], 0xFF); + }); + } + + void rgb565MiniMapVisualizer(u64 address, std::span data, std::vector &output) { + colorMinimapVisualizer(address, data, output, 2, [](std::span subData) -> ImColor { + u8 r = (subData[0] & 0xF8); + u8 g = ((subData[0] & 0x07) << 5) | ((subData[1] & 0xE0) >> 3); + u8 b = (subData[1] & 0x1F) << 3; + return ImColor(r, g, b, 0xFF); + }); + } + void highlightsMiniMapVisualizer(u64 address, std::span data, std::vector &output) { for (size_t i = 0; i < data.size(); i += 1) { std::optional result; @@ -128,6 +152,8 @@ namespace hex::plugin::builtin { ContentRegistry::HexEditor::addMiniMapVisualizer("hex.builtin.minimap_visualizer.ascii_count", asciiCountMiniMapVisualizer); ContentRegistry::HexEditor::addMiniMapVisualizer("hex.builtin.minimap_visualizer.byte_type", byteTypeMiniMapVisualizer); ContentRegistry::HexEditor::addMiniMapVisualizer("hex.builtin.minimap_visualizer.byte_magnitude", byteMagnitudeMiniMapVisualizer); + ContentRegistry::HexEditor::addMiniMapVisualizer("hex.builtin.minimap_visualizer.rgba8", rgba8MiniMapVisualizer); + ContentRegistry::HexEditor::addMiniMapVisualizer("hex.builtin.minimap_visualizer.rgb565", rgb565MiniMapVisualizer); } } \ No newline at end of file