我目前正在处理图像并在程序上生成图像,然后将它们转换为dds或rtc1。由于我的程序的约束,我无法打开外部文件,所以我希望它们嵌入代码。
我发现GIMP有一个“c header”导出器,但我想自己为我生成的那样做 纹理。
使用void *可以将其用于任何类型的数据。
更新:为了澄清事情,我正在考虑像这样输出unsigned int:
void exportToHeader(const void* data, const uin32_t size, const char* name)
{
uint32_t* pData = (uint32_t*)data;
printf("void* %s = {\n");
// TODO: handle last case
for (int i = 0; i < size; ++i) {
printf("%s, ", pData[i]);
}
printf("};\n");
}
编译器是否能够理解这一点?
答案 0 :(得分:1)
如果我理解你的意思,你想要做的就是将二进制图像导入你的C代码。
那么在这种情况下我要做的是,编写一个简单的程序,将文件转储为字节列表并写出这样的输出:
char mydata[] = { 122, 334, 45, ... };
然后你可以简单地包含这个文件并引用你的纹理,就像任何其他C数组一样。
转储文件相当简单(伪代码)。
file = open(file);
printf("char mydata[] = {\n");
while(file != eof)
{
c = getc(file);
printf("%d, ", c);
}
close(file);
printf("\n\;\n");
您可以在C代码中包含任何二进制文件。
答案 1 :(得分:1)
我最终这样做了:
uint32_t* intData = (uint32_t*)data;
for (int i = 0; i < size; ++i) {
if (i == size -1) {
fprintf(fp, "%uu };", intData[i]);
} else {
fprintf(fp, "%uu, ", intData[i]);
}
}
当然,您必须确保在4个字节上对齐才能转换为uint32_t *