gpt4 book ai didi

c++ - SDL 表面和 BMP

转载 作者:行者123 更新时间:2023-11-30 05:14:30 26 4
gpt4 key购买 nike

我一直在尝试使用 SDL 和 openGL 来完成我正在进行的项目,并且为了便于测试,我希望能够在屏幕上绘制 2D,这是我发现的唯一允许我这样做的方法这样做是通过 SDL 表面创建和绘制 BMP 图像。这很好,因为稍后能够保存图像将是一个不错的功能,但如果有其他更好的方法可以使用 openGL 或其他一些方法来执行此操作,请说:)。

这是我目前使用的代码:

int w = 255;
int h = 255;
SDL_Surface* surface = SDL_CreateRGBSurface(0,w,h,32,0,0,0,0);
SDL_LockSurface(surface);
int bpp = surface->format->BitsPerPixel;
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
Uint32 *p = (Uint32 *)surface->pixels + (i * surface->pitch) + (j * bpp);
*p = SDL_MapRGB(surface->format,i,j,i);
}
}
SDL_UnlockSurface(surface);
SDL_SaveBMP(surface, "Test.bmp");

这只是一个基本的测试,让我了解如何执行此操作,我确定我在内存处理方面存在一些问题,但我不确定何时删除 *p。我遇到的最大问题是我在哪里使用 SDL_MapRGB。程序在遇到 SIGSEGV 段错误时崩溃,我无法弄清楚我做错了什么。

最佳答案

您没有释放 p 指向的内存。

但是在使用之后,你必须释放 surface as

SDL_FreeSurface(surface);

此外,bpp 以位为单位。您必须将它除以 8 才能以字节为单位。

而且,要以字节为单位进行算术运算,您必须使用

Uint32 *p = (Uint32 *)((Uint8 *)surface->pixels + (i * surface->pitch) + (j * bpp));

关于c++ - SDL 表面和 BMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43420206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com