我一直在尝试使用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分段错误时程序崩溃,我无法弄清楚我做错了什么。
答案 0 :(得分:1)
您没有释放p
指向的内存。
但使用后,您必须将surface
释放为
SDL_FreeSurface(surface);
此外,bpp
为位。您必须将其除以8
才能以字节为单位。
而且,要以字节为单位进行算术运算,必须使用
Uint32 *p = (Uint32 *)((Uint8 *)surface->pixels + (i * surface->pitch) + (j * bpp));