【问题标题】:8 Bit Surfaces in SDL 2SDL 2 中的 8 位曲面
【发布时间】:2015-06-02 14:58:09
【问题描述】:

最初在 SDL 中,可以使用以下代码来设置表面:

SDL_Surface *screen = SDL_SetVideoMode(800, 600, 8, 0);

现在,在 SDL2 中必须使用以下代码:

SDL_Window *window = SDL_CreateWindow("Title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, 0);
SDL_Surface *surface = SDL_GetWindowSurface(window);

我的问题是 SDL_CreateWindow 无法设置窗口或表面的 bbp。它似乎默认为 32 位。我试过使用SDL_ConvertSurfaceFormat,但surface->format->BitsPerPixel 保持在32。

如何在 SDL 2 中创建 8 位表面?我意识到我需要一个调色板。

【问题讨论】:

    标签: sdl sdl-2 color-depth


    【解决方案1】:

    使用SDL_CreateRGBSurface 可以指定位数。

    例子:

    SDL_Window *sdlWindow;
    SDL_Renderer *sdlRenderer;
    SDL_CreateWindowAndRenderer(0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP, &sdlWindow, &sdlRenderer);
    
    SDL_Surface *screen = SDL_CreateRGBSurface(0, 640, 480, 32,
                                        0x00FF0000,
                                        0x0000FF00,
                                        0x000000FF,
                                        0xFF000000);
    SDL_Texture *sdlTexture = SDL_CreateTexture(sdlRenderer,
                                            SDL_PIXELFORMAT_ARGB8888,
                                            SDL_TEXTUREACCESS_STREAMING,
                                            640, 480);
    
    SDL_UpdateTexture(sdlTexture, NULL, screen->pixels, screen->pitch);
    SDL_RenderClear(sdlRenderer);
    SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
    SDL_RenderPresent(sdlRenderer);
    

    【讨论】:

    • 谢谢。我如何设置window的表面?
    • @Tyler0425 添加了一个示例。
    • 我必须使用纹理和渲染器?
    • @Tyler0425 我不确定你是否可以不用,看看MigrationGuide
    • @Tyler0425 您需要发布显示问题的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多