如何使用EasyX导入图片?相关代码报错应如何解决?
问题原因
你混淆了EasyX和EGE两个图形库的API规范,触发报错的核心原因如下:
- 你的项目实际引入了EGE图形库的头文件,EGE中的
IMAGE属于不完全类型,不允许直接在栈上声明固定长度的数组 - 你参照EasyX的语法直接声明
IMAGE img[12],编译器无法读取到IMAGE类型的完整大小定义,因此抛出"不完全类型"、"storage size of 'img' isn't known"报错 - 额外问题:你的代码中
SIZE常量未提前定义,即使类型问题解决也会触发未定义标识符报错
解决方案
根据你实际使用的库选择对应修改方案即可:
方案1:使用EasyX库开发
注:EasyX仅支持Visual Studio编译器,如果你使用Dev-C++等基于GCC的开发工具,无法正常使用该库,请切换为方案2
- 移除项目中所有EGE相关的头文件引用,改为引入EasyX官方头文件:
#include <graphics.h>,同时确认你的Visual Studio已正确安装EasyX插件 - 提前定义
SIZE常量,数值按需调整即可
修改后可正常运行的代码示例:
#include <graphics.h> #define SIZE 200 // 按实际需要的图片尺寸调整数值 IMAGE img[12]; void load() { LoadImage(&img[0], L"0.jpg", SIZE, SIZE); }
方案2:使用EGE库开发
- 将
IMAGE数组改为PIMAGE指针数组,EGE要求所有IMAGE对象必须通过动态分配创建 - 替换图片加载接口为EGE原生的
newimage、getimage接口,不要混用EasyX的LoadImage - 提前定义
SIZE常量
修改后可正常运行的代码示例:
#include <ege.h> #define SIZE 200 // 按实际需要的图片尺寸调整数值 ege::PIMAGE img[12]; void load() { // 动态创建指定大小的IMAGE对象 img[0] = ege::newimage(SIZE, SIZE); // 加载图片到目标对象 ege::getimage(img[0], L"0.jpg", 0, 0, SIZE, SIZE); }
注:程序退出前需要调用ege::delimage(img[下标])释放每个动态创建的IMAGE对象,避免出现内存泄漏
内容的提问来源于stack exchange,提问作者Barthes0131
相关产品推荐
相关产品推荐

