SDL surfaces and BMPs
SDL surfaces and BMPs
我一直在尝试使用 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
SDL_FreeSurface(surface);
此外,bpp
以位为单位。您必须将其除以8
才能以字节为单位。
而且,要以字节为单位进行算术,您必须使用
Uint32 *p = (Uint32 *)((Uint8 *)surface->pixels + (i * surface->pitch) + (j * bpp));
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- SDL surfaces and BMPs