1

そのため、SDL ライブラリを使用して単純な画像を表示しようとしていますが、関数 SDL_BlitSurface() を使用しても何も起こらず、黒い画面しか表示されません。また、.bmp ファイル、ソース、および実行可能ファイルがすべて同じディレクトリにあることにも注意してください。

//SDL Header
#include "SDL/SDL.h"

int main(int argc, char* args[])
{
    //Starts SDL
    SDL_Init(SDL_INIT_EVERYTHING);

    //SDL Surfaces are images that are going to be displayed.
    SDL_Surface* Hello = NULL;
    SDL_Surface* Screen = NULL;

    //Sets the size of the window (Length, Height, Color(bits), Sets the Surface in Software Memory)
    Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
    //Loads a .bmp image
    Hello = SDL_LoadBMP("Hello.bmp");
    //Applies the loaded image to the screen
    SDL_BlitSurface(Hello, NULL, Screen, NULL);
    //Update Screen
    SDL_Flip(Screen);
    //Pause
    SDL_Delay(2000);
    //Deletes the loaded image from memory
    SDL_FreeSurface(Hello);
    //Quits SDL
    SDL_Quit();

    return 0;
}
4

3 に答える 3

1

LoadBMP() はがらくたです。SDL_image ライブラリをインストールする

sudo apt-get install SDL_image SDL_image_dev 

(パッケージの名前については不明です。aptitude や synaptic などを使用してそれらを見つけてください)

そしてそれを含めます

#include "SDL_image.h"

次に、画像をロードします

SDL_Surface* Hello = IMG_Load("Hello.bmp");
if (!Hello){
    printf("Ooops, something went wrong: %s\n", IMG_GetError());
    exit(0);
}

重要:常にエラー チェックを実行し、エラーを出力する必要があることに注意してください。

if (!Hello)と同じですif (Hello == NULL)

于 2012-07-10T09:13:35.570 に答える
0

他の種類の画像をブリットしてみましたか? SDL を初めて使用したとき、.bmp ファイルに問題があったことを覚えています。.jpg または .png を試して、コードが機能するかどうかにかかわらず、私に連絡してください。

于 2012-07-09T22:48:27.910 に答える
0

同様の「問題」がありました。プレバージョンか、グラフィックドライバーと互換性のないバージョンである可能性があります。考えてみましょう。SWSurface と Flip; 私が覚えているように、フリップ機能はダブル バッファリングされた HW_Surface でのみ機能します。

Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

Flip の代わりに Update を試してください。

SDL_Update(surface);

そして次回:)

Hello = SDL_LoadBMP("Hello.bmp");
if(Hello != NULL) {
    //Applies the loaded image to the screen
    SDL_BlitSurface(Hello, NULL, Screen, NULL);
    //Update Screen
    ...
    //Deletes the loaded image from memory
    SDL_FreeSurface(Hello);
}

SDL_FreeSurface(NULL)プログラムがクラッシュするためです。

于 2012-07-10T08:40:08.450 に答える