SDL 2 中的 8 位表面
8 Bit Surfaces in SDL 2
最初在 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 无法设置 window 或表面的 bbp。它似乎默认为 32 位。我试过使用 SDL_ConvertSurfaceFormat
但 surface->format->BitsPerPixel
保持在 32.
如何在 SDL 2 中创建 8 位图面?我意识到我需要一个调色板。
使用 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);
最初在 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 无法设置 window 或表面的 bbp。它似乎默认为 32 位。我试过使用 SDL_ConvertSurfaceFormat
但 surface->format->BitsPerPixel
保持在 32.
如何在 SDL 2 中创建 8 位图面?我意识到我需要一个调色板。
使用 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);