1
0
mirror of synced 2025-02-19 19:51:41 +01:00

nodes: Added Image visualizer

Supports JPG, PNG, TGA, BMP, PSD, GIF, HDR and PIC via stb_image
This commit is contained in:
WerWolv 2022-02-06 01:32:15 +01:00
parent 16a9d0c0c6
commit 69c48edfdf
3 changed files with 33 additions and 2 deletions

View File

@ -29,8 +29,8 @@ enum ImGuiCustomCol {
namespace ImGui {
struct Texture {
ImTextureID textureId;
int width, height;
ImTextureID textureId = nullptr;
int width = 0, height = 0;
[[nodiscard]] constexpr bool valid() const noexcept {
return this->textureId != nullptr;
@ -43,6 +43,12 @@ namespace ImGui {
[[nodiscard]] auto size() const noexcept {
return ImVec2(this->width, this->height);
}
[[nodiscard]] constexpr auto aspectRatio() const noexcept {
if (this->height == 0) return 1.0F;
return float(this->width) / float(this->height);
}
};
int UpdateStringSizeCallback(ImGuiInputTextCallbackData *data);

View File

@ -835,6 +835,27 @@ namespace hex::plugin::builtin {
size_t m_highestCount = 0;
};
class NodeVisualizerImage : public dp::Node {
public:
NodeVisualizerImage() : Node("hex.builtin.nodes.visualizer.image.header", { dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Buffer, "hex.builtin.nodes.visualizer.image.input") }) { }
void drawNode() override {
ImGui::Image(this->m_texture, scaled(ImVec2(this->m_texture.aspectRatio() * 200, 200)));
}
void process() override {
auto rawData = this->getBufferOnInput(0);
if (this->m_texture.valid())
ImGui::UnloadImage(this->m_texture);
this->m_texture = ImGui::LoadImageFromMemory(rawData.data(), rawData.size());
}
private:
ImGui::Texture m_texture;
};
void registerDataProcessorNodes() {
ContentRegistry::DataProcessorNode::add<NodeInteger>("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.int");
ContentRegistry::DataProcessorNode::add<NodeFloat>("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.float");
@ -883,6 +904,7 @@ namespace hex::plugin::builtin {
ContentRegistry::DataProcessorNode::add<NodeCryptoAESDecrypt>("hex.builtin.nodes.crypto", "hex.builtin.nodes.crypto.aes");
ContentRegistry::DataProcessorNode::add<NodeVisualizerDigram>("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.digram");
ContentRegistry::DataProcessorNode::add<NodeVisualizerImage>("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.image");
}
}

View File

@ -607,6 +607,9 @@ namespace hex::plugin::builtin {
{ "hex.builtin.nodes.visualizer.digram", "Digram" },
{ "hex.builtin.nodes.visualizer.digram.header", "Digram Visualizer" },
{ "hex.builtin.nodes.visualizer.digram.input", "Input" },
{ "hex.builtin.nodes.visualizer.image", "Image" },
{ "hex.builtin.nodes.visualizer.image.header", "Image Visualizer" },
{ "hex.builtin.nodes.visualizer.image.input", "Input" },
{ "hex.builtin.tools.demangler", "Itanium/MSVC demangler" },