1

我正在尝试在 SDL 表面上显示使用 CImg 生成的图像。

CImg 将图像数据保存为一个简单的数组(例如,在绿色值之前的红色值,在蓝色值之前)。

我读过使用 RWops 是可行的方法,但不知何故我无法弄清楚如何将图像数据转换为 RWops 结构。

4

1 回答 1

1

我从未使用过CImg,但基本上,您需要做的是创建一种方法来转换您的CImg数据以遵循已知的图像格式,例如bitmap.

不幸的是,CImg它似乎没有提供这种功能,如SourceForge 上所见,但有人很友好地在线程中提供了代码(尽管似乎存在格式问题)。

使用上面线程中的代码和SDL_LoadBMP_RW,您可以执行以下操作:

unsigned char *bitmapImage = NULL; //the target-buffer
bitmapImage = cimg_image.save_bmp2buffer(); //get the bmp-buffer

// the buffer size is based on the bmp format, according to save_bmp2buffer it should be something like:
// I simplified a bit his formula, some operations didn't seem necessary
// The 54 represents the size of a bitmap header, the rest is the padded pixel content size
int imgSize = 54 + (3 * cimg_image.width() + 4 - (3 * cimg_image.width()) % 4) * cimg_image.height();

SDL_RWops* rw = SDL_RWFromMem(bitmapImage, imgSize );

SDL_Surface* yourSurface = SDL_LoadBMP_RW(rw, 1); // 1 will free the rw when done

free(bitmapImage);

此代码未经测试,但应该是一个很好的起点!

于 2013-04-20T22:36:19.090 回答