SDL2_image的IMG_Load读取.png图片的问题

youhou4333 2015-12-16 10:05:11
我使用SDL2_image中的IMG_Load函数的时候,一开始我读取的是.bmp图片,可以正常运行。代码如下:

SDL_Surface *temp_Surface=IMG_Load("assets/animate.png");
if(temp_Surface == NULL)
{
cout << "fail to initialize surface" << endl;
return false;
}

我把图片文件夹放在了源码目录下,因此这里我使用的是相对路径。
显示的效果如下:

因为我要使用精灵表,bmp图片不能使用alpha通道,因此我改成读取.png文件。代码如果:

SDL_Surface *temp_Surface=IMG_Load("assets/animate.png");
if(temp_Surface == NULL)
{
cout << "fail to initialize surface" << endl;
return false;
}

显示的效果我没有贴出来,因为只是显示了一块640*480像素的白白的屏幕。。。

我只是改了图片的后缀名,为什么不能读出来(这两个图片完全一样,除了后缀名)?请大家解答
...全文
1796 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fubaojun2006 2016-04-20
  • 打赏
  • 举报
回复
引用 3 楼 butters10 的回复:
你只改后缀是不行的,图片还不是png,png内部是通过画板着色的,你需要通过图像编辑器重新输出png图片
正解,很多程序是依靠文件内部数据而不是文件名来决定怎么样显示图片的,这样就给人错觉文件名后缀不重要,但是,对于SDL这种源代码处理的来说,要命了,依靠文件后缀来加载不同的处理程序。
stephen_csdn 2016-02-07
  • 打赏
  • 举报
回复
你只改后缀是不行的,图片还不是png,png内部是通过画板着色的,你需要通过图像编辑器重新输出png图片
Bo_wen_ 2015-12-16
  • 打赏
  • 举报
回复
//通过文件名来加载texture SDL_Texture* LoadImage(std::string file){ SDL_Texture* tex = nullptr; tex = IMG_LoadTexture(renderer, file.c_str()); if (tex == nullptr) throw runtime_error("Failed to load image: " + file + IMG_GetError()); return tex; } background = LoadImage("../res/background.png");
youhou4333 2015-12-16
  • 打赏
  • 举报
回复
第一个程序块的后缀名不是.png,是.bmp。我粗心了。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧