从 GIMP 导出的 C 源文件加载图像 [英] Loading an image from a C source file, exported from GIMP
问题描述
我正在尝试为游戏加载 openGL 纹理.纹理是从 GIMP 导出为 .C 源文件
的图像.当我在我的项目中#include
这个文件(使用 Visual C++ 2010 Ultimate)时,我收到一个编译器错误说fatal error C1091: compiler limit: string exceeded 65535 bytes in length
I'm trying to load an openGL texture for a game. The texture is an image that has been exported as a .C source file
from GIMP. When I #include
this file in my project (using Visual C++ 2010 Ultimate), I get a compiler error saying fatal error C1091: compiler limit: string exceeds 65535 bytes in length
是否有任何解决方法?
Is there any workaround ?
我想将图像导出为 C 头文件 的原因是为了让程序与图像一起编译,而我不必同时提供 raw
图像文件与可执行文件.
The reason I wanted to export the image as a C header file was so that the program compiles with the image, and I dont have to provide raw
image files along with the executable.
代码:
#include <iostream>
#include <Windows.h>
#include <glfw.h>
#include "X.c"
#define X 1
#define O 2
#pragma comment(lib, "glfw.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "gdi32.lib")
using namespace std;
float render();
void stepGame(float);
void keyboard(int, int);
int main(int argv, int *argc[])
{
glfwInit();
glfwOpenWindow(480, 480, 16, 16, 16, 16, 16, 16, GLFW_WINDOW);
glfwSetKeyCallback(keyboard);
glfwSetWindowTitle("Tic Tac Toe!");
glClearColor(1.0, 1.0, 1.0, 1.0);
float dT;
while(glfwGetWindowParam(GLFW_OPENED) > 0)
{
glfwPollEvents();
dT = render();
stepGame(dT);
}
return 0;
}
图像文件:X.c
推荐答案
这是一个替代解决方案.将图像导出为原始数据文件,然后使用 bin2hex 将其转换为C/C++ 数组.这将正常工作,因为该脚本生成的不是一个巨大的字符串,而是一个字符数组.下面是一个例子:
Here is an alternative solution. Export the image as a raw data file, then use bin2hex to convert it to a C/C++ array. This will work fine because instead of a huge string this script generates a char array. Here is an example:
$ bin2hex.pl
bin2hex.pl by Chami.com
usage:
perl bin2hex.pl <binary file> <language id>
<binary file> : path to the binary file
<language id> : 0 = Perl, 1 = C/C++/Java, 2 = Pascal/Delphi
$ bin2hex.pl x.bin 1
/* begin binary data: */
char bin_data[] = /* 112 */
{0x23,0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F
,0x2E,0x68,0x3E,0x0A,0x23,0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x74
,0x69,0x6D,0x65,0x2E,0x68,0x3E,0x0A,0x0A,0x69,0x6E,0x74,0x20,0x6D,0x61,0x69
,0x6E,0x28,0x69,0x6E,0x74,0x20,0x61,0x72,0x67,0x63,0x2C,0x20,0x63,0x68,0x61
,0x72,0x2A,0x20,0x61,0x72,0x67,0x76,0x5B,0x5D,0x29,0x0A,0x7B,0x0A,0x20,0x20
,0x20,0x20,0x70,0x72,0x69,0x6E,0x74,0x66,0x28,0x22,0x25,0x64,0x5C,0x6E,0x22
,0x2C,0x20,0x73,0x69,0x7A,0x65,0x6F,0x66,0x28,0x74,0x69,0x6D,0x65,0x5F,0x74
,0x29,0x29,0x3B,0x0A,0x7D,0x0A,0x0A};
/* end binary data. size = 112 bytes */
这篇关于从 GIMP 导出的 C 源文件加载图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!