【Dear imgui】有关Image的实现

本文介绍了如何在Dear ImGui中使用Image组件加载图片,强调了纹理贴图的正确生成方法,以及避免帧循环内生成纹理导致的问题。通过使用OpenGL指令和SOIL库,作者展示了创建纹理并获取纹理ID的步骤。此外,文中还提及了将图片转化为响应式图片按钮的实现,但建议直接使用普通按钮以获得更好的交互效果。最后,展示了Image组件的使用示例,并表达了希望找到将图片作为窗口背景的实现方式的愿望。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Image组件加载图片

使用Image组件加载图片比较简单,但是还是有需要注意的地方

Imgui中使用图片, 我是使用OpenGL的指令生成纹理贴图,进行设置,然后加载图片使用的是SOIL库

我们生成纹理贴图的时候,需要将纹理提前生成好,然后获取纹理的ID,而不是在帧循环里面和窗口渲染一起进行生成纹理,如果将生成纹理的部分放在了帧循环里面,那么纹理在显示一会之后,图片就会黑掉,此时我猜测可能是因为生成的纹理的部分在循环里面,每一帧都回生成一个纹理,那么内存就会爆掉。然后生成纹理就失败了,此时显示不了图片了。

代码里面还使用了一个图片按钮的组件,可以将图片变成一个有响应时间的按钮,但是个人觉得效果不是很好,还不如直接使用普通按钮,然后设置按钮的悬停,点击,正常三种状态的颜色。

首先贴上创建贴图的代码:

通过这个贴图的加载,我们可以获得:MyClass::textureID,里面存储的就是我们之后要使用的贴图ID,我们把这个变量定义成类的静态成员变量。方便之后一直使用

void MyClass::CreateTexture()
{
	ImGuiIO& io = ImGui::GetIO();
	//unsigned int texture;
	int nWidth = 0, nHeight = 0, nChannel = 0;
	const char* picture = "C:\\Users\\FSY\\Desktop\\imguiOfNative\\example\\example_glfw_opengl3\\rgba.jpg";
	unsigned ch
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值