c - 从 GIMP 导出的 C 源文件加载图像

标签 c visual-c++ textures gimp

我正在尝试为游戏加载 openGL 纹理。纹理是已导出为 .C source file 的图像来自 GIMP。当我#include在我的项目中使用这个文件(使用 Visual C++ 2010 Ultimate),我收到一个编译器错误说 fatal error C1091: compiler limit: string exceeds 65535 bytes in length
有没有任何 解决方法?

我想将图像导出为 的原因C 头文件 以便程序与图像一起编译,而我不必提供 raw图像文件以及可执行文件。

代码:

#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++ 数组。这将正常工作,因为该脚本生成的不是一个巨大的字符串,而是一个字符数组。下面是一个例子:

$ 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 */

关于c - 从 GIMP 导出的 C 源文件加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018484/

相关文章:

c - (另一个)关于 C 循环和数据结构的问题

c# - 用 C# 等效项替换由 CreateDispatch 调用调用的 VB6 DLL

graphics - Slick-Util(在lwjgl中): Importing a texture and displaying it results in weird,在纹理附近创建的额外像素(以行为单位)

c++ - 错误 LNK2038 : mismatch detected for '_MSC_VER' : value '1600' doesn't match value '1700' in CppFile1. 对象

c++ - OpenCV 将列添加到矩阵

ios - 转换纹理中的 UIImage

java - 纹理未正确拉伸(stretch)。为什么会这样?

java - C libssh 中的 SSH 客户端用 Java jsch 重写

java - STUN UDP请求包问题

c - 这个校验和计算有什么问题吗?