无法从资源加载图像

时间:2014-08-26 14:54:18

标签: c++ visual-studio-2012 sfml

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

这是我的main.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"

从我的resource.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

1 个答案:

答案 0 :(得分:1)

问题是我在HRSRC要求RT_RCDATA类型,并且正在尝试传递BITMAP资源类型。我改变了

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

为:

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

现在工作正常。