我想知道是否有人知道在gimp中导出SDL时是否可以使用.c或.h图像。我知道有.xpm,但我无法以某种方式为.xpm图像启用透明度。
我知道用c语言渲染.c/.h文件有一些复杂的方法,但我更愿意使用SDL,因为我正在努力学习它
提前感谢!
gimp头导出函数使用自己的格式,提供了一个用于取消绑定的宏,更多详细信息请点击
可以使用sdl_CreateRGBSurfaceFrom 将原始数据缓冲区加载到sdl曲面中
如果你想将图片加载到sdl中,我可以建议你简单地将图片文件转换为C数组,而不是原始图片,而是bmp或png,
您可以使用此工具将任何二进制文件转换为.h
这将为您提供文件大小作为定义和指向文件缓冲区的指针
#define dataSize 93722
unsigned char data[dataSize] = {
'B', 'M', 0x1A, 'n', 0x1, 0x0, 0x0, 0x0,
0x0, 0x0, 'z', 0x0, 0x0, 0x0, 'l', 0x0,
...
};
由于它是sdl,您需要将缓冲区转换为sdl_RWops结构,
SDL_RWops * z = SDL_RWFromMem(data,dataSize);
现在,为了将这个结构加载到一个新的sdl曲面中,您需要使用*_RW函数,
如果您喜欢使用经典的bmp文件,则在带有sdl_LoadBMP_RW的sdl中直接支持它对于所有支持的图片类型,在sdl图像中都存在相同的东西,
SDL_Surface * titleScreen = SDL_LoadBMP_RW(z,1);
要定义sdl曲面的透明颜色值,可以使用sdl_SetColorKey函数
SDL_SetColorKey( titleScreen, SDL_SRCCOLORKEY, 10);
如果你想要一个具体的例子,请检查这个旧的源代码,它是unclock&将多张bmp图片从内存中的rar文件加载到sdl中
由于原始数据或bmp没有经过处理,您的可执行文件大小可能会快速增长,也许可以看看upx可执行压缩程序,压缩整个exe也会压缩他发送的数据,位图或原始数据会被处理,但在你的程序中仍然是原始的