2017-11-10 5 views
1

SDL 창에 이미지를 표시하는 데 어려움을 겪고 있으며 내가 잘못하고있는 것이 확실하지 않습니다. 코드가 잘 컴파일되고 이미지가 내 .exe와 함께 디버그 폴더에 저장되었으므로 표시되지 않는 이유는 확실하지 않습니다. 사소한 문제가 있습니까? 디버거에서 코드를 단계별로 각 단계에서 리턴 값을 검사하는 경우C++/SDL2에서 .bmp 이미지 표시

#include <iostream> 
#include <stdio.h> 
#include <SDL.h> 
#undef main 

using namespace std; 

const int screenWidth = 640; 
const int screenHeight = 480; 

int main(int argc, char* args[]) { 

SDL_Window* window = SDL_CreateWindow("Game", SDL_WINDOWPOS_UNDEFINED, 
SDL_WINDOWPOS_UNDEFINED, screenWidth, screenHeight, SDL_WINDOW_SHOWN); 
SDL_Surface* image = SDL_LoadBMP("image.bmp"); 
SDL_Renderer* render = SDL_CreateRenderer(window, -1, 0); 
SDL_Texture* texture1 = SDL_CreateTextureFromSurface(render, image); 

SDL_RenderCopy(render, texture1, NULL, NULL); 
SDL_RenderPresent(render); 

SDL_UpdateWindowSurface(window); 

SDL_Delay(5000); 

SDL_DestroyTexture(texture1); 
SDL_DestroyRenderer(render); 
SDL_FreeSurface(image); 
SDL_DestroyWindow(window); 

SDL_Quit(); 
return 0; 
} 
+1

'이미지'값은 무엇입니까? NULL이라면'SDL_GetError()'는 무엇이라고 말합니까? 상대 경로는 '.exe folder'가 아닌 현재 작업 디렉토리와 관련이 있습니다. 이는 상당히 다른 작업 일 수 있습니다. 이미 렌더러를 사용하고 있기 때문에'SDL_UpdateWindowSurface'를 제거해야하고 그것과 서페이스를 결합 할 수 없습니다. 마지막으로, 최소한 윈도우 이벤트에 대해 렌더링 루프 및 다시 그리기를 수행합니다 (또는 더 간단하게 무조건 다시 그리기). 한번 그리기와 수면은 사물을 표시하는 방법이 아닙니다. – keltar

+0

리눅스에서는 @keltar가 도움이 될 [SDL_GetError] (https://wiki.libsdl.org/SDL_GetError)를 작성 했으므로 코드는 정상적으로 작동합니다. 어쩌면 이미지 파일 형식의 무엇인가? – Alex

답변

0

는 예기치 않은 무언가를받을 수 있나요? nullpointer와 같은. 아마 을 좁히는 데 도움이 될 것입니다. 당신이 IDE에서 실행하는 경우

이미지가 내 .EXE

와 디버그 폴더에 저장되어, 현재 작업 폴더를 프로젝트 폴더로 을 것입니다.

+0

고마워요! 문제는 대신 프로젝트 폴더에 있어야한다는 것입니다. – ColinQ