GIF文件转换为头文件工具
目的:
GIF文件转为头文件
举例:
用UE打开GIF文件,如下图所示:

图1 test.gif文件
将上面文件内容转化为头文件,放到一个数组里面,内容如下:
图2 test.h文件思路:
从上面可知,将二进制文件转换为文本文件,十六进制 47 转为 0x47,其他类推。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> static char pre_compiler_str_begin[] = "#ifdef PIP_PNG_GIF";
static char pre_compiler_str_end[] = "#endif";
static char const_char[] = "const char ";
static char sign_begin[] = "[] = {";
static char sign_end[] = "};"; int match_file(unsigned char *buf, int file_size, char *src_file_name)
{
unsigned char *p_start = NULL, *p_end = NULL;
char *head_data = NULL;
char str[64], filename[256], *p;
int i,ret = 0; if((buf == NULL) || (src_file_name==NULL))
{
return -1;
} p_end = buf; if ((strlen(src_file_name) > 4)
&& (strcmp(src_file_name + strlen(src_file_name) - 4, ".gif") == 0))
{
strncpy(filename, src_file_name, strlen(src_file_name) - 4);
strcpy(filename + strlen(src_file_name) - 4, ".h");
}
else
{
sprintf(filename, "%s.h", src_file_name);
} do
{
FILE *head_file = NULL;
head_file = fopen(filename, "w");
if (head_file == NULL)
{
ret = -1;
fprintf(stderr,"[%s] Open file %s error!\n", src_file_name, filename);
break;
} // write str:
// #ifdef PIP_PNG_GIF
// const char test0_gif[] = {
fwrite(pre_compiler_str_begin, 1, strlen(pre_compiler_str_begin), head_file);
fputc('\n',head_file); fwrite(const_char, 1, strlen(const_char), head_file);
p = strrchr(filename, '\\')+1;
fwrite(p, 1, strlen(p)-2, head_file);
fwrite(sign_begin, 1, strlen(sign_begin), head_file);
fputc('\n',head_file); // write data
for(i = 0; i < file_size; i++)
{
memset(str, 0, sizeof(str));
sprintf(str, "%s%0.2x%c", "0x", buf[i], ',');
fwrite(str, 1, strlen(str), head_file);
if((i == file_size - 1) || (i % 16 == 15))
{
fputc('\n',head_file);
}
} fwrite(sign_end, 1, strlen(sign_end), head_file);
fputc('\n',head_file); fwrite(pre_compiler_str_end, 1, strlen(pre_compiler_str_end), head_file);
fputc('\n',head_file); fclose(head_file);
} while (0); return ret;
} int main(int argc, char *argv[])
{
FILE *input = NULL;
char *file_name = NULL;//"test.h";
unsigned char *bmp_data = NULL;
int i;
int file_size = 0; if (argc <= 1)
{
printf("Please assign input files!\n");
return -1;
} for (i=1; i<argc; i++)
{
file_name = argv[i]; input = fopen(file_name, "rb");
if (!input)
{
fprintf(stderr, "[%s] Cannot open file!\n",file_name);
continue;
}
fseek(input, 0, SEEK_END);
file_size = ftell(input);
bmp_data = (unsigned char *)malloc(file_size + 1);
fseek(input, 0, SEEK_SET);
fread(bmp_data, 1, file_size, input);
bmp_data[file_size] = '0'; if(match_file(bmp_data, file_size, file_name) == 0)
{
fprintf(stdout, "[%s]\tOK\n",file_name);
}
else
{
fprintf(stdout, "[%s] Failed!\n",file_name);
}
} return 0; }
GIF文件转换为头文件工具的更多相关文章
- APNS .p12文件转换为 .pem文件
1:先用mac的钥匙串工具,把APN的推送证书转换为 .p12文件: 2:在mac的终端下 把.p12文件转换为 .pem文件 openssl pkcs12 -in apns-dev-cert.p12 ...
- 自定义C/C++头文件以及头文件重复定义解决
今天再看二叉树的知识,看着看着就看到C/C++的头文件及头文件重复定义这一块去了.以前就看到过这个问题,但是自己一直没有用到这方面的东西,今天遇到就顺便总结一下,等以后忘了再回来看看. 首先明确一点C ...
- C语言常用的库文件(头文件、函数库)
C语言常用的库文件(头文件.函数库) C系统提供了丰富的系统文件,称为库文件.C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过.在& ...
- 使用VirtualBox把IMG文件转换为VDI文件
使用VirtualBox把IMG文件转换为VDI文件 首先确保已安装VirtualBox. 需要使用的命令: 语法:$ VBoxManage convertdd input.img output.vd ...
- python之模块py_compile用法(将py文件转换为pyc文件)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件):二进制文件,是由py文件经过编译后 ...
- Android.mk文件c++头文件包含问题
Eclipse 中 Android.mk文件c++头文件包含问题 jni中的目录结构如下: 编译找不到头文件 LOCAL_PATH := $(call my-dir)LOCAL_C_INCLUDES ...
- 永远也记不住的linux环境变量,库文件,头文件,交叉编译...
一.环境变量1.node-v4.9.1-linux-armv7l1)安装cp node-v4.9.1-linux-armv7l.tar.gz /usr/local/cd /usr/local/tar ...
- Python如何实现doc文件转换为docx文件?
Python如何实现doc文件转换为docx文件? 在开发过程中遇到一个关于读写doc和docx的问题: 一个文件夹中有两种文件, 一种为doc结尾, 一种为docx结尾, 需要将这些文件全部重命名. ...
- TensorFlow的checkpoint文件转换为pb文件
由于项目需要,需要将TensorFlow保存的模型从ckpt文件转换为pb文件. import os from tensorflow.python import pywrap_tensorflow f ...
随机推荐
- 大型项目 Gradle 的常用库和版本管理[转]
http://www.tuicool.com/articles/vqQZBrm 大型项目 Gradle 的常用库和版本管理 时间 2016-03-15 06:44:00 Mystra 原文 htt ...
- mysql 配置参数
mysql JDBC Driver 常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysq ...
- ServletContext和ServletConfig
一.ServletConfig对象 1 .作用 ServletConfig对象: 主要是用于加载servlet的初始化参数. 在一个web应用可以存在多个ServletConfig对象(一个Servl ...
- Android开发_Android数据的四种存储方式
Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...
- 直接通过浏览器打开Android App 应用
点击浏览器中的URL链接,启动特定的App. 首先做成HTML的页面,页面内容格式例如以下: <a href="[scheme]://[host]/[path]?[query]&quo ...
- 利用京东云擎架设免费Wordpress 博客(git方式)
京东云擎(JAE)是京东推出的一款公有云产品,是京东云平台生态圈的核心组成部分.与百度的BAE.新浪的SAE同样.可是JAE刚上线不久,可能非常多人都还没听说过或不太了解.我尝试在JAE安装WordP ...
- [MySQL 5.6] 初识5.6的optimizer trace
在MySQL5.6中,支持将执行的SQL的查询计划树记录下来,目前来看,即使对于非常简单的查询,也会打印出冗长的查询计划,看起来似乎不是很可读,不过对于一个经验丰富,对查询计划的生成过程比较了解的 ...
- hadoop错误java.io.IOException Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try
错误: java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more go ...
- RedHat7上安装MariaDB
编译安装MariaDB 下载MariaDB# wget http://mirrors.opencas.cn/mariadb//mariadb-10.1.8/source/mariadb-10.1.8. ...
- update inner join
string sql = @"update a set a.M_ParentID=b.M_ParentID, a.M_Name=b.M_Name, a.M_Seq=b.M_Seq from ...