举报

关于loadimage()函数不能正确从资源载入图片的问题,easyx版本26.1.1

0

基本情况介绍:

开发语言为C语言,开发平台visual studio 2022,使用easyx实现图形化界面,easyx版本为26.1.1。

现将1张24位位图放入资源中(通过画图已将图片转为24位位图,通过Resource Hacker看编译后的exe能看到这张图)。在程序实现时,图片资源使用easyx的IMAGE对象,图片从资源载入使用easyx的loadimage()函数。在程序启动时,用初始化函数将资源中的这张图片读入内存(写入IMAGE对象),然后用putimage()显示。

问题:

1 看帮助关于loadimage()函数的介绍,从资源载入的参数可选项说得不是很清楚,按例子去测试也不能得到正确结果。

2 使用loadimage()函数,返回值是2或5007,但无法在屏幕显示正确的图片。

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <conio.h>
#include "resource.h"
/**
 * 初始化函数 - 将资源中的图片读入内存并显示到屏幕上
 * 该函数负责从资源中加载BMP图片到IMAGE对象,
 */
void InitializeAndSaveImage()
{
    // 创建IMAGE对象用于存储图片数据
    IMAGE img;

    //IDB_BITMAP1是资源中位图的ID
    int isload = loadimage(&img, RT_BITMAP, MAKEINTRESOURCE(IDB_BITMAP1));       //函数编译通过,返回2
    //int isload = loadimage(&img, _T("BITMAP"), MAKEINTRESOURCE(IDB_BITMAP1));   //函数编译通过,返回5007

    putimage(300, 400, &img);	// 在另一个位置显示,但黑屏无法显示资源中的图片
}

/**
 * 主函数 - 程序入口点
 * 初始化图形界面,调用初始化函数处理图片资源
 */
int main()
{
    // 初始化图形窗口,设置窗口大小
    initgraph(800, 600);

    // 设置控制台输出编码为UTF-8以便正确显示中文
    system("chcp 65001");

    // 输出程序开始执行的信息
    printf("程序开始执行...\n");

    // 调用初始化函数处理图片资源
    InitializeAndSaveImage();

    // 显示提示信息
    printf("按任意键退出程序...\n");

    // 等待用户按键
    _getch();

    // 关闭图形窗口
    closegraph();

    return 0;
}
ava
胡涛

2026-2-12

举报
0

返回值 2 和 5007 的含义在文档中有写:

含义
ERROR_FILE_NOT_FOUND 2 文件没找到
ERROR_RESOURCE_NOT_FOUND 5007 资源没找到

其次,EasyX 暂时没有支持 RT_BITMAP 类型的资源。当 .bmp 文件以 RT_BITMAP 类型资源导入时,会删掉 .bmp 的文件头,仅保留位图数据,因此,已经不再是一个完整的 .bmp 文件。

建议使用 .png 格式,导入时,会让你填写资源类型,例如你写 IMAGE,那么注意,资源类型写的是 "IMAGE",而导入的 .bmp 资源类型是 Bitmap。注意,后者没有双引号,不是字符串,这是最大的区别。

所以解决办法有两个:

1. 改用 .png 格式图像,比 .bmp 体积小,且 .png 是无损的。

2. 如果一定要用 .bmp 文件,那么可以手动以文本编辑的方式修改 resouce.rc 文件:

IDB_BITMAP1             BITMAP                  "D:\\test.bmp"
改为:
IDB_BITMAP1             BITMAP1                 "D:\\test.bmp"

保存后,会看到原来的资源类型 BITMAP 变成了 "BITMAP1",然后就可以这样加载图片:

loadimage(&img, _T("BITMAP"), MAKEINTRESOURCE(IDB_BITMAP1));

当然,可以连资源的 ID 也直接修改为字符串,那么加载的语句会更简单清晰。

ava
慢羊羊

前天 17:37

技术讨论社区