为啥 SDL 程序不显示 BMP 图片?
Posted
技术标签:
【中文标题】为啥 SDL 程序不显示 BMP 图片?【英文标题】:Why does SDL program not show BMP picture?为什么 SDL 程序不显示 BMP 图片? 【发布时间】:2012-05-24 15:29:20 【问题描述】:我从Lazy 得到以下代码:
#include <iostream>
#include "SDL/SDL.h"
using namespace std;
int main()
//Start SDL
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface *hello = NULL;
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
hello = SDL_LoadBMP("hello.bmp");
SDL_BlitSurface(hello, NULL, screen, NULL);
SDL_Flip(screen);
SDL_Delay(3000);
SDL_FreeSurface(hello);
//Quit SDL
SDL_Quit();
return 0;
有时会显示图片,但大多数时候它只是一个黑色窗口(带有此图片的细线)。我在同一个目录中有名为“hello.bmp”的 BMP 文件。 PS.我有 ArchLinux。
【问题讨论】:
【参考方案1】:在显示您的图像之前,您应该将其转换为与您选择的视频模式兼容的格式。 因此你应该实现这样的东西:
SDL_Surface *imagef;
imagef = SDL_DisplayFormat(image);
在对 BMP 进行 blit 之前,并使用 imagef
进行所有操作。
【讨论】:
谢谢!你是对的。但它会发生吗。教程中没有它的迹象。 我不知道那个教程。我根据我的知识回答。你所说的“它发生了”是什么意思?而且,如果我的答案是您想要的,请您接受吗? 当然,没问题)但我不明白为什么它在大多数情况下没有格式化就可以工作(我已经用谷歌搜索了它并看到了很多类似问题的答案:“它有效正确地在我的电脑上”)。 我不太清楚。我认为 - 虽然这只是我的赌注 - 因为 SDL_DisplayFormat 将信息(例如像素格式)从帧缓冲区复制到新表面,并且这些信息基于所使用的监视器,所以这是一个依赖于硬件的问题。由于我不知道 SDL 函数如何填充像素格式结构的成员(以及颜色),我不能说有时 SDL_LoadBMP 是否将 BMP 转换为与显示器有点兼容的表面(无需转换它)。我尽量保持简单。 不客气。然而,考虑到这只是我的赌注,不要认为这是理所当然的。以上是关于为啥 SDL 程序不显示 BMP 图片?的主要内容,如果未能解决你的问题,请参考以下文章