c++ - SDL_BlitSurface 不起作用 - 我在我的表面上看不到图像

标签 c++ image window sdl

再一次遇到一些我无法弄清楚如何工作的代码。我正在尝试创建一个 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),所以我不知道为什么窗口仍然是黑色的,没有显示图像。

最佳答案

您需要调用SDL_Flip在你 blit 之后更新屏幕。

SDL_Flip(Window);

了解 double buffering还有。

关于c++ - SDL_BlitSurface 不起作用 - 我在我的表面上看不到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15142191/

相关文章:

html - 禁止从 html 页面下载图像

vb.net - 无需下载即可从 url 在图像框中设置图像

c++ - 对 RGB 图像执行阈值操作

c++ - GLFW - 窗口需要 2 秒才能打开

c++ - GCC 4.7 中是否存在错误。 2's implementation of shared_ptr' s(模板化)赋值运算符?

c++ - 在 C++ 中执行 try catch 时没有输出

c++ - C++中带有变量的文件路径

c++ - cout 是否同步/线程安全?

Python/PyGame : Get window size

javascript - 加载所有 JS 文件时的浏览器事件