2012-10-30 7 views
2

현재 다음과 같은 버튼 클래스를 만들려고합니다. 클래스를 사용하는 경우, 다음 작업을 수행 할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 *를 가리키고 있기 때문에 왜 그런지 이해할 수 없습니다. http://sdl.beuc.net/sdl.wiki/SDL_DisplayFormat에서

답변

0

: '변환이 실패하거나 메모리가 부족하면, 반환 NULL'SDL_DisplayFormat에 대한 호출이 어떤 이유로 실패처럼

는 그래서, 아마 검사를 수행하는 것이 유용 할 것 같습니다 SDL_DisplayFormat을 호출 한 후 m_button_image == NULL에 대한 오류가 무엇인지 확인하기 위해 SDL_GetError()를 사용하는 경우 NULL이 아닌 경우

만약 내가 그다지 도움이되지 않는다면, 변환되지 않은 이미지를 디스플레이 형식의 표면에 블리 팅하여 느린 변환을 수행하고 이미지로 사용합니다 (거의 비슷하지만 조금 복잡하지만 실제로는 아보 이가됩니다). d SDL_DisplayFormat에 대한 호출)

1

그래서 문제가 무엇인지 알아 냈습니다. 화면을 초기화하기 전에 SDL_DisplayFormat을 호출했습니다. 함수의 순서가 잘못되어 SDL_DisplayFormat에 이미지를 변환 할 표면이 없습니다.

관련 문제