SFML无法从内存加载图像,无法提供数据

时间:2015-12-11 01:37:45

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

我在VS2012中使用SFML和C ++。在调试控制台中我有错误"无法从内存加载图像,没有提供数据"和"无法创建纹理,无效大小< 0x0>"。

我的main.cpp

#include <iostream>
#include "Test.h"
#include "resource.h"
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>


using namespace std;

sf::Image LoadImageFromResource(const std::string& name)
{
    HRSRC rsrcData = FindResource(NULL, name.c_str(), RT_RCDATA);

    DWORD rsrcDataSize = SizeofResource(NULL, rsrcData);

    HGLOBAL grsrcData = LoadResource(NULL, rsrcData);

    LPVOID firstByte = LockResource(grsrcData);


    sf::Image image;
    image.loadFromMemory(firstByte, rsrcDataSize);


    return image;
}

int main()
{      
    sf::Image SpriteSheetWalkRes = LoadImageFromResource("IDB_PNG1");
    sf::Texture SpriteSheetWalk;
    SpriteSheetWalk.loadFromImage(SpriteSheetWalkRes);
}

我的资源.rc

#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS

#include "afxres.h"

#undef APSTUDIO_READONLY_SYMBOLS

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

#ifdef APSTUDIO_INVOKED

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif

IDB_PNG1            RCDATA           "F:\\(...)\\test_player.png"

#endif 

#ifndef APSTUDIO_INVOKED

#endif 

我的资源。

#define IDB_PNG1                        101

#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

1 个答案:

答案 0 :(得分:0)

我建议使用资源编辑器或dumpbin.exe,并检查您的资源是否已链接到二进制文件中。