C++ ImGui 显示图片-本地图片

1.首先需要使用imgui的依赖

image.png

2.头文件引用

#include "imgui/imgui_impl_glfw.h"
#include "imgui/imgui_impl_opengl3.h"

3.此时运行代码会报错

因为还需要 GLFW 的库
官方下载地址:
Download | GLFW
这里以我的系统 为例 :windows 64位

image.png

下载完成之后解压的目录
image.png

4.引入GLFW库

找到刚刚下载的库解压:

1.添加附加包含目录

GLFW路径\include
image.png

2.添加lib,使用和自己编译同样版本的lib,我是vc2022

image.png

3.链接到这个库

#pragma comment (lib, "glfw3.lib")
image.png

5.使用stb 这个库加载图片

1.库地址:
GitHub | stb库
2.我们只需要 stb_image.h
3.将stb_image.h添加到我们的项目中

image.png

4.加上头文件

#define STB_IMAGE_IMPLEMENTATION  //必须加上
#include "stb_image.h"
image.png

以上准备阶段就ok,开始代码阶段

1.ImGui 是通过纹理来加载图片的所以我们实现一个从图片文件加载到纹理

// 从文件加载纹理
bool LoadTextureFromFile(const char* filename, ID3D11ShaderResourceView** out_srv)
{
    int width, height, channels;
    unsigned char* pixels = stbi_load(filename, &width, &height, &channels, STBI_rgb_alpha);
    if (!pixels)
        return false;

    D3D11_TEXTURE2D_DESC desc;
    ZeroMemory(&desc, sizeof(desc));
    desc.Width = width;
    desc.Height = height;
    desc.MipLevels = 1;
    desc.ArraySize = 1;
    desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    desc.SampleDesc.Count = 1;
    desc.SampleDesc.Quality = 0;
    desc.Usage = D3D11_USAGE_DEFAULT;
    desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
    desc.CPUAccessFlags = 0;

    D3D11_SUBRESOURCE_DATA subResource;
    ZeroMemory(&subResource, sizeof(subResource));
    subResource.pSysMem = pixels;
    subResource.SysMemPitch = width * 4;

    ID3D11Texture2D* pTexture = nullptr;
    if (g_pd3dDevice->CreateTexture2D(&desc, &subResource, &pTexture) != S_OK)
    {
        stbi_image_free(pixels);
        return false;
    }

    // Create texture view
    D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
    ZeroMemory(&srvDesc, sizeof(srvDesc));
    srvDesc.Format = desc.Format;
    srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
    srvDesc.Texture2D.MipLevels = desc.MipLevels;
    srvDesc.Texture2D.MostDetailedMip = 0;
    if (g_pd3dDevice->CreateShaderResourceView(pTexture, &srvDesc, out_srv) != S_OK)
    {
        pTexture->Release();
        stbi_image_free(pixels);
        return false;
    }

    pTexture->Release();
    stbi_image_free(pixels);
    return true;
}

2.在ImGui 初始化完成之后

   // 加载图片
   ID3D11ShaderResourceView* textureSRV = nullptr;
   if (!LoadTextureFromFile("E:\\summer\\图片\\gh_89b7666ea8b7_258.jpg", &textureSRV)) {
       // 加载失败
       return 1;
   }
image.png

3.ImGui渲染函数中

{
           ImGui::Begin(u8"夏休助手");
           ImGui::Text(u8"程序平均帧率 %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
           ImGui::Text(u8"文本测试");
           // 图片显示
           ImGui::Image(textureSRV, ImVec2(200, 200));
           ImGui::End();
}

4.运行效果

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容