我在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
答案 0 :(得分:0)
我建议使用资源编辑器或dumpbin.exe,并检查您的资源是否已链接到二进制文件中。