从资源加载图像失败

Failure in loading image from resources

本文关键字:失败 图像 加载 资源      更新时间:2023-10-16

我在VS2012中将SFML与C++一起使用。我的程序有很多图像,但我一直在尝试从资源加载其中一些图像。我已经在projectname.rc中成功地实现了该文件,一切看起来都很好,但当我试图加载图像时,它会生成一个异常,它说:"无法从内存加载图像,没有提供数据"(这是来自sfml)。

这是我的主要.cpp:

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <windows.h>
#include "resource.h" 
sf::Image LoadImageFromResource(const std::string& name)
{
    HRSRC rsrcData = FindResource(NULL, name.c_str(), RT_RCDATA);
    if (!rsrcData)
        throw std::runtime_error("Failed to find resource.");
    DWORD rsrcDataSize = SizeofResource(NULL, rsrcData);
    if (rsrcDataSize <= 0)
        throw std::runtime_error("Size of resource is 0.");
    HGLOBAL grsrcData = LoadResource(NULL, rsrcData);
    if (!grsrcData)
        throw std::runtime_error("Failed to load resource.");
    LPVOID firstByte = LockResource(grsrcData);
    if (!firstByte)
        throw std::runtime_error("Failed to lock resource.");
    sf::Image image;
    if (!image.loadFromMemory(firstByte, rsrcDataSize))
        throw std::runtime_error("Failed to load image from memory.");
    return image;
}
int main()
{
sf::Image resource = LoadImageFromResource("IDB_BITMAP1");
// (...)
}

这是来自我的(projectname.rc)资源文件:

#include "resource.h"
#include "afxres.h"
//(. . .)
IDB_BITMAP1      BITMAP     "C:\ (...) \sprite.bmp"

和我的资源。h:

#define IDB_BITMAP1                     107
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        108
#define _APS_NEXT_COMMAND_VALUE         40003
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

问题是我在HRSRC请求RT_RCDATA类型,并试图传递BITMAP资源类型。我更改了

IDB_BITMAP1      BITMAP     "C:\ (...) \sprite.bmp" 

至:

IDB_BITMAP1      RCDATA     "C:\ (...) \sprite.bmp"`

现在它运行良好。