24bitbmp to bmp565
2011年10月22日
/*对开发手机应用的有作用*/
/*资源来自互联网*/
#include
#include
//#define ALIGNMENT_FIX
typedef struct _bitmap_file_header bitmap_file_header;
struct _bitmap_file_header
{
unsigned short Type;
unsigned int Size;
unsigned short Reserved1;
unsigned short Reserved2;
unsigned int OffSet;
};
typedef struct _bitmap_info_header bitmap_info_header;
struct _bitmap_info_header
{
unsigned int Size;
long Width;
long Height;
short int Planes;
short int BitCount;
unsigned int Compression;
unsigned int SizeImage;
long XPelsPerMeter;
long YPelsPerMeter;
unsigned int ClrUsed;
unsigned int ClrImportant;
};
int main(int argc, char* argv[])
{
#ifdef ALIGNMENT_FIX
int pre_append_bytes;
int post_append_bytes;
#endif
int i,j;
int bytes_per_line;
int end_fix_byte;
unsigned char read_byte[3];
unsigned short int write_data;
char write_string[11];
char file_name[1024];
bitmap_file_header is_file_header;
bitmap_info_header is_info_header;
FILE *fp;
FILE *out_fp;
if (argc != 3)
{
printf("bmp24_to565.exe input.bmp output.hex\n");
return -1;
}
memset(file_name,0,1024);
sprintf(file_name,"./%s",argv[1]);
fp = fopen(file_name,"rb");
if (NULL == fp)
{
printf("can't open file:%s",file_name);
return -1;
}
/* 读取文件头 */
fread(&is_file_header.Type,sizeof(is_file_header.Type),1,fp);
fread(&is_file_header.Size,sizeof(is_file_header.Size),1,fp);
fread(&is_file_header.Reserved1,sizeof(is_file_header.Reserved1),1,fp);
fread(&is_file_header.Reserved2,sizeof(is_file_header.Reserved2),1,fp);
fread(&is_file_header.OffSet,sizeof(is_file_header.OffSet),1,fp);
if (0x4d42 != is_file_header.Type)
{
printf("not support file format\n");
return -1;
}
/* 读取信息头 */
fread(&is_info_header,sizeof(is_info_header),1,fp);
/* 类型判断*/
if(24 != is_info_header.BitCount)
{
printf("only support 24 deep bitmap\n");
return -1;
}
/* 有无调色板 */
if(0 != is_info_header.ClrUsed)
{
printf("only support 24 deep bitmap without color plant\n");
return -1;
}
/* 是否压缩 */
if(0 != is_info_header.Compression)
{
printf("not support Compression bitmap\n");
return -1;
}
#ifdef ALIGNMENT_FIX
/* 原24bbp补齐的字节数,为4则没有补齐*/
pre_append_bytes = 4 - ((is_info_header.Width * 3) % 4);
/* 补齐的字节术,为4则不需要补齐*/
post_append_bytes = 4 - ((is_info_header.Width * 2) % 4);
#endif
/* open to write */
memset(file_name,0,1024);
sprintf(file_name,"./%s",argv[2]);
out_fp = fopen(file_name,"w");
if (NULL == out_fp)
{
printf("can't open file:%s",file_name);
return -1;
}
if (0 == ((is_info_header.Width * 3) % 4))
bytes_per_line = (is_info_header.Width * 3);
else
bytes_per_line = (is_info_header.Width * 3) + (4 - (is_info_header.Width * 3) % 4);
/* convert data */
for (i=0; i 16 */
write_data = (read_byte[0] >> 3) | ((read_byte[1] & 0xFC) > 8;
sprintf(write_string,"0x%02x,0x%02x,",read_byte[0],read_byte[1]);
fwrite(write_string,10,1,out_fp);
}
#ifdef ALIGNMENT_FIX
/* 24bbp 是否有补齐的bytes */
if (4 != pre_append_bytes)
{
fread(&read_byte,pre_append_bytes,1,fp); /* 跳过补全的0x00 */
}
/* 生成的RGB565是否需要对齐*/
if (4 != post_append_bytes)
{
/* RGB565 只可能补一个 0x0000*/
/* 调试发现输出不需要补齐*/
sprintf(write_string,"0x00,0x00,");
fwrite(write_string,10,1,out_fp);
}
#endif
}
fclose(fp);
fclose(out_fp);
return 0;
}
批量转换脚本
#!/usr/bin/env python
import os,re,subprocess
filelist=os.listdir(os.getcwd())
test = re.compile("\.[bB][mM][pP]$", re.IGNORECASE)
bmpfiles = filter(test.search, filelist)
for file in bmpfiles:
subprocess.Popen('bmp24_to565.exe %s %shex' %(file,file[:-3]), shell=True)
发表评论
-
Linux私房菜 课后练习第十章
2012-01-20 00:13 529Linux私房菜 课后练习第十章 2011年06月15日 ... -
JAVA I / O操作与字节流
2012-01-20 00:13 850JAVA I / O操作与字节流 2010年08月17日 ... -
Linux Kernel 核心中文手册(5)--进程间通信机制
2012-01-20 00:13 729Linux Kernel 核心中文手册(5)--进程间通信机制 ... -
S3C2440上触摸屏驱动实例开发讲解(转)
2012-01-20 00:13 637S3C2440上触摸屏驱动实例开发讲解(转) 2011年04 ... -
linux 笔记
2012-01-20 00:13 557linux 笔记 2010年10月31日 ... -
全国各地的美女特点一览
2012-01-19 01:05 620全国各地的美女特点一览 2011年05月07日 ... -
全国各地的美女特点一览
2012-01-19 01:05 589全国各地的美女特点一 ... -
上海女人之前世今生
2012-01-19 01:05 512上海女人之前世今生 20 ... -
2011-9-29
2012-01-19 01:05 5752011-9-29 2011年09月29日 vbs常用代 ... -
VC中的0XCCCCCCCC
2012-01-19 01:05 1222VC中的0XCCCCCCCC 2011年10月23日 在 ... -
bmp/gif/jpg图象最底层原理分析(1)----jpg
2012-01-17 00:28 638bmp/gif/jpg图象最底层原 ... -
索引模式下深度为8或4的BMP图
2012-01-17 00:28 856索引模式下深度为8或4 ... -
使用位图句柄,将其保存为BMP文件
2012-01-17 00:28 1486使用位图句柄,将其保存为BMP文件 2011年05月02日 ... -
计算机C语言编程-----C语言保存图形为16色BMP文件
2012-01-17 00:28 647计算机C语言编程-----C语言保存图形为16色BMP文件 ... -
小学生评语大全{六年级}
2012-01-15 14:47 549小学生评语大全{六年级 ... -
最有文采有学生评语下载大全
2012-01-15 14:47 664最有文采有学生评语下载大全 2010年01月22日 h ... -
作文评语大全
2012-01-15 14:47 526作文评语大全 2009年10 ... -
小学生期末评语经典大全
2012-01-15 14:47 546小学生期末评语经典大全 2011年12月15日 1.你是 ... -
作文评语大全
2012-01-15 14:47 581作文评语大全 2009年11 ...
相关推荐
最基础的数字图像的c++代码显示一24bit BMP图像的直方图
比较两幅bitmap图像,找出不同,并将第一副图像中与第二幅不同的pixel取反输出。
最基础的图像处理编程 能够显示一8bitBMP图像的直方图
包含波形小幅扰动抗攻击 自己编写的 包含24bitBMP文件的读取与像素分离 快速傅立叶变换 散列LSB等相关算法的头文件 与系统无关 可以通过G++编译 在Win/Linux环境下都可以正常工作 也可以将头文件提取出来应用于其他...
首先要知道添加的图片是什么格式的 建议添加bmp格式的。 操作时先把图片添加到资源中,然后再picture控件单击右键属性,选哪个bitbmp。然后找到你添加的那个。