1

もう一度、機能させる方法を理解できないコードに行き詰まりました。SDL サーフェスを作成し、ビットマップ イメージを読み込んで表示しようとしています。私のコードは次のようなものです:

struct Image {
    string       Name;
    SDL_Surface* Surface;
};

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR lpCmdL, INT nCmdS) {
    // Will store our bitmap
    Image NewImage;

    // Initialization
    SDL_Init(SDL_INIT_EVERYTHING);

    // Create main window
    SDL_Surface *Window = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
    SDL_WM_SetCaption("MyApp", "MyApp");

    // Load image and make it compatible
    SDL_Surface* Surf_Temp = NULL;
    if((Surf_Temp = SDL_LoadBMP("myimage.bmp")) != NULL) {
        NewImage.Name = "MyImage";
        NewImage.Surface = SDL_DisplayFormat(Surf_Temp);
        SDL_FreeSurface(Surf_Temp);
    }

    // Draw image over the window
    if (NewImage.Surface != NULL && Window  != NULL) {
        SDL_Rect DestR;
                 DestR.x = 0;
                 DestR.y = 0;
        if (SDL_BlitSurface(NewImage.Surface, NULL, Window, &DestR) == -1) {
            MessageBox(NULL, "Error", "Alert", MB_OK);
        }
    }

    // Run
    SDL_Event Event;
    while(!End) {
        while(SDL_PollEvent(&Event)) {
            EventsHandler(&Event);
        }
    }
    return 0;
}

さて、画像は正しく読み込まれました。正しいビットマップの幅である NewImage.Surface->w (幅) を取得して確認しました。エラー メッセージ (SDL_BlitSurface が 0 を返す) は表示されないので、ウィンドウがまだ黒く、画像が表示されない理由がわかりません。

4

1 に答える 1

3

画面にブリットした後、 SDL_Flipを呼び出して画面を更新する必要があります。

SDL_Flip(Window);

ダブルバッファリングについても読んでください。

于 2013-02-28T17:55:05.450 に答える