clion下使用easyx加载图片

使用loadimage加载图片运行不显示

img


换成绝对路径也不显示
所以是怎么回事啊?

可打印错误信息

#include <graphics.h>

int main()
{
    initgraph(640, 480);
    IMAGE img;
    if (!loadimage(&img, "C:\\path\\to\\image.jpg"))
    {
        printf("Error: %s\n", getlasterror());
        return -1;
    }
    putimage(0, 0, &img);
    getch();
    closegraph();
    return 0;
}

使用绝对路径实例 可参考

#include <graphics.h>

int main()
{
    initgraph(640, 480);
    IMAGE img;
    loadimage(&img, "C:\\path\\to\\image.jpg");
    putimage(0, 0, &img);
    getch();
    closegraph();
    return 0;
}

在CLion下使用EasyX库中的LoadImage函数加载图片时出现问题,可能是因为EasyX库的处理方式与CLion中的默认设置不兼容。

你可以尝试在CLion的项目中添加以下代码来显式指定EasyX库的链接方式和路径:

#pragma comment(lib, "Winmm.lib") // 如果需要音频支持,还需要加入 Winmm 库
#pragma comment(lib, "EasyXa.lib") // EasyX 的静态库文件(使用静态库时)
//#pragma comment(lib, "EasyXU.lib") // EasyX 的静态库文件(使用 Unicode 版本时,仅支持 VC++)
//#pragma comment(lib, "EasyXW.lib") // EasyX 的静态库文件(使用 WideChar 版本时,仅支持 VC++)

#include <graphics.h> // EasyX 绘图库头文件

int main()
{
    initgraph(640, 480); // 初始化图形窗口

    IMAGE img; // EasyX 图像对象
    LoadImage(&img, L"bg.png"); // 加载图片文件
    putimage(0, 0, &img); // 绘制图片

    _getch(); // 暂停等待用户按键
    closegraph(); // 关闭图形窗口

    return 0;
}

此外,如果你使用的是 EasyX 2021 版本,建议将EasyX的头文件(graphics.h等)和库文件(EasyXa.lib等)放在项目目录中,可以避免路径设置问题。

如果问题仍然存在,你可以访问EasyX官方论坛上查看更多关于在CLion下使用EasyX的问题和解决方案。

你这是相对路径啊,相对路径只需要:文件名.后缀名,没有当前./,不需要这个,你也可以找到图片右键把绝对路径复制放进去

你排查 了图片文件路径错误,那图片格式不支持、图像内存分配失败、图像处理错误这些因素呢?是否有把握?
如下面示例,使用loadimage函数加载图片,然后使用putimage函数将图片绘制到窗口中。最后,等待用户按下任意键退出程序,并释放图像内存。小小示例:

#include <graphics.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <conio.h>  
#include <windows.h>  
#include <easyx/easyx.h>  
  
int main()  
{  
    // 初始化图形界面  
    initgraph(640, 480);  
      
    // 加载图片  
    char* image_path = "image.jpg";  // 图片文件路径  
    unsigned char* image = loadimage(image_path);  // 加载图片  
    if (image == NULL) {  
        printf("Failed to load image.\n");  
        return 1;  
    }  
      
    // 绘制图片  
    setbkcolor(WHITE);  // 设置背景色为白色  
    setcolor(BLACK);  // 设置前景色为黑色  
    fillrect(0, 0, getwidth(), getheight());  // 填充整个窗口  
    setcolor(RED);  // 设置前景色为红色  
    putimage(0, 0, image, WHITE_BRUSH, getwidth(), getheight());  // 绘制图片  
      
    // 等待用户按下任意键退出程序  
    printf("Press any key to exit...\n");  
    getch();  
      
    // 释放图像内存  
    freeimage(image);  
      
    // 关闭图形界面  
    closegraph();  
    return 0;  
}

参考我的这个代码片段,我这个在我的这个环境可以显示图片

    // 创建我们的游戏窗口
    initgraph(897,895);

    // 显示我们的棋盘图片
//    loadimage(0,"res/棋盘2.jpg");  // 不能显示
    loadimage(0,"F:\\clion_learn\\learn_c\\chess\\res\\棋盘2.jpg");


    // 播放提示音
    mciSendString("play F:\\clion_learn\\learn_c\\chess\\res\\start.wav",0,0,0);
//    PlaySound("F:\\clion_learn\\learn_c\\chess\\res/start.wav", nullptr, SND_FILENAME | SND_ASYNC);

    // 加载黑棋和白棋棋子的图片
    loadimage(&chessBlackImg,_T("F:\\clion_learn\\learn_c\\chess\\res\\black.png"),chessSize,chessSize,true);
    loadimage(&chessWhiteImg,_T("F:\\clion_learn\\learn_c\\chess\\res\\white.png"),chessSize,chessSize,true);

举个例子

include_directories(./EasyX/include)
link_directories(./EasyX/lib64)
link_libraries(libeasyx.a)
#include <graphics.h>        // 引用图形库头文件
#include <conio.h>
int main()
{
    initgraph(640, 480);    // 创建绘图窗口,大小为 640x480 像素
    circle(200, 200, 100);    // 画圆,圆心(200, 200),半径 100
    _getch();                // 按任意键继续
    closegraph();            // 关闭绘图窗口
    return 0;
}


首先确认版本兼容性导致有些函数用了不起作用的情况,其次查看窗口大小宽高设置

请确保你提供给loadimage函数的图片路径是正确的。你可以使用绝对路径或相对路径来指定图片位置。如果图片不在当前工作目录下,需要提供完整的路径。

加载图片是用loadimageW函数试试,或者换一张图片试试,有可能是图片本身的问题

不要./,只要文件名

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您提供的信息,如果使用loadimage加载图片时无法显示,即使将路径改为绝对路径也不显示,可能有以下几个可能的原因:

  1. 图片路径错误:请确保您提供的图片路径是正确的。检查路径中是否包含任何拼写错误或文件位置错误。还要确保文件扩展名与实际图片文件的扩展名匹配。
  2. 图片文件损坏:如果图片文件本身损坏或无效,加载时可能会出现问题。请确认图片文件是否完好,并尝试使用其他图片进行测试。
  3. 服务器配置问题:有时,服务器配置可能会限制或阻止加载外部图片。检查您的服务器配置或相关的安全设置,确保允许加载外部图片。
  4. 文件权限问题:如果您尝试从本地文件系统加载图片,确保您具有足够的权限访问该文件。检查文件的访问权限,并确保您具有读取该文件的权限。
  5. 代码错误:请检查您的代码是否正确。确保在正确的位置调用了loadimage函数,并且传递给该函数的参数正确。

如果上述解决方案都没有解决您的问题,建议您提供更多的代码和错误信息,以便更准确地分析和解决问题。