1

我正在用 c++ 创建一个基本的基于控制台的图像处理工具,到目前为止,我发现创建对 RGB 值进行操作的函数非常容易!

我现在想做的是创建用于模糊、锐化和调整图像大小的功能。我知道为了做到这一点,我必须将新像素映射到新图像。我在使用这个内置的 SDL 函数创建一个新的空白表面时遇到了一点问题,我打算在该表面上映射新像素:

SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);

我的程序的其余部分使用Uint8*而不是Uint32,所以我不确定这将如何影响程序。此外,我不是 100% 确定所有参数以及它们的作用/用途:即标志和深度。

有人可以就如何使用此功能正确创建新的 SDL_Surface 给我一些建议吗?

4

1 回答 1

7

这里有一个代码示例,您可以查看:http ://wiki.libsdl.org/moin.fcg/SDL_CreateRGBSurface

具体来说,您正在寻找的行是:

surface = SDL_CreateRGBSurface(0,width,height,32,0,0,0,0);

这些标志用于各种用途,但您应该可以将其设置为 0。至于深度,这是指您正在查看的每个像素的位数。所以在这种情况下,8 * 4 是 32(包括 alpha)。

我想你已经加载了图像。如果是这样,您可以使用这个加载的图像来获取每像素的位数:

surface->format->BitsPerPixel
于 2013-03-12T17:15:21.007 回答