我正在尝试在 SDL 表面上显示使用 CImg 生成的图像。
CImg 将图像数据保存为一个简单的数组(例如,在绿色值之前的红色值,在蓝色值之前)。
我读过使用 RWops 是可行的方法,但不知何故我无法弄清楚如何将图像数据转换为 RWops 结构。
我从未使用过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);
此代码未经测试,但应该是一个很好的起点!