SDL图像不显示

时间:2012-10-30 15:17:24

标签: c++ sdl

我目前正在尝试创建一个如下所示的按钮类。

void Button::apply_image(std::string path) {

    SDL_Surface* loaded_image = NULL;
    loaded_image = IMG_Load(path.c_str());
    m_button_image = SDL_DisplayFormat(loaded_image);
    SDL_FreeSurface(loaded_image);

}

void Button::show(SDL_Surface* screen) {
    SDL_BlitSurface(m_button_image, NULL, screen, &m_box);
}

使用课程时,我会执行以下操作:

Button button1(0,0,50,50);
button1.apply_image("images/cards/1.png");

SDL_Surface* screen = NULL;

screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
SDL_WM_SetCaption("House Of Cards", NULL);

button1.show(screen);
SDL_Flip(screen);

我的问题是,当我使用SDL_DisplayFormat(loaded_image);时,图像不显示但是当我摆脱那条线和SDL_FreeSurface(loaded_image);时。然后我将loaded_image = IMG_load(path.c_str());更改为m_button_image = IMG_Load(path.c_str());图片将会显示。我做错了什么,因为路径显然是正确的,因为当我不调用DisplayFormat()时图像会显示。通过使用gdb,m_button_image是NULL,我不明白它为什么,因为gdb还显示loaded_image指向SDL_Surface *。

2 个答案:

答案 0 :(得分:1)

所以我弄清楚问题是什么。在我初始化屏幕之前,我正在调用SDL_DisplayFormat。因为我的函数顺序错误,所以SDL_DisplayFormat没有表面将图像转换为。

答案 1 :(得分:0)

来自http://sdl.beuc.net/sdl.wiki/SDL_DisplayFormat

: '如果转换失败或内存不足,则返回NULL'

所以看起来SDL_DisplayFormat的调用由于某种原因失败了,在调用SDL_DisplayFormat之后检查m_button_image == NULL可能是有用的,如果它是NULL则使用SDL_GetError()来查看是什么错误是

如果这没有帮助那么我不知道会发生什么,虽然你可以通过将未转换的图像blitting到显示格式化的表面来进行较慢的转换,并将其用作图像(几乎相同但是有点复杂,真的只是避免调用SDL_DisplayFormat)