2017-11-10 10 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

Linuxでは、@keltarが[SDL_GetError](https://wiki.libsdl.org/SDL_GetError)が役立つように、あなたのコードはそのまま動作します。画像ファイル形式の何か? – Alex

答えて

0

、予期しない何かを得るのですか? nullポインタなど。それはおそらくあなたを助けるつもりです それを絞り込みます。あなたがIDEから実行した場合

画像は私の.exeの

でデバッグフォルダに配置された、現在の作業フォルダは、プロジェクトフォルダであることを を行っています。

+0

ありがとう!問題は、代わりにプロジェクトのフォルダにあるはずだったということでした。 – ColinQ

関連する問題