C语言实现BMP图片生成
##
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef unsigned char byte;
- typedef unsigned short dbyte;
- typedef unsigned long int dword;
- typedef unsigned short word;
- /*******************************************
- *定义bmp文件的头部数据结构
- ********************************************/
- #pragma pack(push,2) //保持2字节对齐
- struct tagBITMAPFILEHEADER {
- //bmp file header
- dbyte bfType; //文件类型
- dword bfSize; //文件大小,字节为单位
- word bfReserved1; //保留,必须为0
- word bfReserved2; //保留,必须为0
- dword bfOffBits; //从文件头开始的偏移量
- //bmp info head
- dword biSize; //该结构的大小
- dword biWidth; //图像的宽度,以像素为单位
- dword biHeight; //图像的高度,以像素为单位
- word biPlanes; //为目标设备说明位面数,其值总是设为1
- word biBitCount; //说明比特数/像素
- dword biCompression; //图像数据压缩类型
- dword biSizeImage; //图像大小,以字节为单位
- dword biXPelsPerMeter; //水平分辨率,像素/米
- dword biYPelsPerMeter; //垂直分辨率,同上
- dword biClrUsed; //位图实际使用的彩色表中的颜色索引数
- dword biClrImportant; //对图像显示有重要影响的颜色索引的数目
- //bmp rgb quad
- //对于16位,24位,32位的位图不需要色彩表
- //unsigned char rgbBlue; //指定蓝色强度
- //unsigned char rgbGreen; //指定绿色强度
- //unsigned char rgbRed; //指定红色强度
- //unsigned char rgbReserved; //保留,设置为0
- }BMPFILEHEADER;
- #pragma (pop)
- struct tagBITMAPFILEHEADER *bmp_p; //定义bmp文件头结构体指针
- FILE *fd; //定义一个文件类型的指针
- /*************************************************************
- *初始化bmp文件头部,设置bmp图片
- **************************************************************/
- void Init_bmp_head(void)
- {
- bmp_p = &BMPFILEHEADER;
- bmp_p-> bfType = 0x4D42; //文件类型
- bmp_p-> bfSize = 0x25836; //文件大小,字节为单位
- bmp_p-> bfReserved1 = 0x0; //保留,必须为0
- bmp_p-> bfReserved2 = 0x0; //保留,必须为0
- bmp_p-> bfOffBits = 0x36; //从文件头开始的偏移量
- //bmp info head
- bmp_p-> biSize = 0x28; //该结构的大小
- bmp_p-> biWidth = ; //图像的宽度,以像素为单位
- bmp_p-> biHeight = ; //图像的高度,以像素为单位
- bmp_p-> biPlanes = 0x01; //为目标设备说明位面数,其值总是设为1
- bmp_p-> biBitCount = ; //说明比特数/像素
- bmp_p-> biCompression = ; //图像数据压缩类型
- bmp_p-> biSizeImage = 0x25800;//0x09f8; //图像大小,以字节为单位
- bmp_p-> biXPelsPerMeter = 0x60;//0x60; //水平分辨率,像素/米
- bmp_p-> biYPelsPerMeter = 0x60; //垂直分辨率,同上
- bmp_p-> biClrUsed = ; //位图实际使用的彩色表中的颜色索引数
- bmp_p-> biClrImportant = ; //对图像显示有重要影响的颜色索引的数目
- }
- int main(void)
- {
- static char *file_name =NULL; //保存文件名的指针
- static long file_length = 0x25836; //文件的大小(整个文件)
- unsigned char *file_p = NULL; //写入数据指针
- unsigned char *file_p_tmp = NULL; //写入数据临时指针
- unsigned char *byte_copy_p = NULL; //文件头部传递指针
- unsigned char byte_copy = ; //文件头部数据拷贝变量
- int i = ;
- file_name = "test1.bmp";
- Init_bmp_head();
- file_p = (unsigned char *)malloc(sizeof(char)*); //申请一段内存
- file_p_tmp = file_p;
- for(i = ;i < ;i++ )
- {
- if(i% ==)
- {
- *file_p_tmp = 0x00; //图像前8位值
- }
- else
- {
- *file_p_tmp = 0xf0; //图像后8位值
- }
- file_p_tmp++;
- }
- byte_copy_p = (unsigned char *)bmp_p;
- file_p_tmp = file_p;
- for(i = ;i < ;i++)
- {
- *file_p_tmp = *byte_copy_p;
- file_p_tmp++;
- byte_copy_p++;
- }
- fd = fopen(file_name, "w");
- fwrite(file_p, file_length, ,fd);
- free(file_p); //释放申请的内存(重要)
- fclose(fd);
- printf("Done success!!!\n");
- getchar();
- return ();
- }
C语言实现BMP图片生成的更多相关文章
- linu下C语言之BMP图片操作编程(上)
BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...
- 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
关于bmp图片的格式,网上有很多文章,具体可以参考百度百科,也有例子程序.这里只提要注意的问题. (1)结构体定义问题:首先按照百度百科介绍的定义了结构体,但是编译发现重定义BITMAPFILEHEA ...
- linu下C语言之BMP图片操作编程(下)
前面提高了一个将BMP左转的程序,右转其实也是类似的操作,就不写了,这节,我们来实现,将一张BMP图进行灰度处理,代码贴上: #include <stdio.h> #include < ...
- linu下C语言之BMP图片操作编程(中)
http://blog.csdn.net/morixinguan/article/details/50719472 关于BMP图的介绍之前已经说过了,最近要用到,又要重新开始学习. 现在实现一个让bm ...
- c语言数字图像处理(一):bmp图片格式及灰度图片转换
本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...
- 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)
稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像 ...
- 简单bmp图片处理工具——python实现
预备实现功能: 1.读取bmp文件 2.保存bmp文件 3.对bmp图片进行放大.缩小 4.对bmp图片进行灰度化 5.对bmp图片进行旋转 bmp文件格式非常简单,对于我这种初学者来说减少了不少不必 ...
- bmp图片的有关操作
读取bmp图片 并生成新的bmp图片 #include "stdafx.h"#include <windows.h>#include <cmath>#inc ...
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换等
mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上) MP3文件格式(二)---ID3v2 图:ID3V1标签结构 图:ID3V2标签 ...
随机推荐
- mysql 数据库备份的多种方式
一.使用mysqldump进行备份 1.完整备份所有数据库 mysqldump -u root -p --all-databases > E:/all.sql 在mysql8之前,存储过程和事件 ...
- 进程同步(multiprocess.Lock、multiprocess.Semaphore、multiprocess.Event) day38
进程同步(multiprocess.Lock.multiprocess.Semaphore.multiprocess.Event) 锁 —— multiprocess.Lock 通过刚刚的学习,我们千 ...
- 内置函数 hashlib configparser logging 模块 C/S B/S架构
1.内置函数 # 内置的方法有很多 # 不一定全都在object中 # class Classes: # def __init__(self,name): # self.name = name # s ...
- 8.Mysql数据类型选择
8.选择合适的数据类型8.1 CHAR与VARCHAR CHAR固定长度的字符类型,char(n) 当输入长度不足n时将用空格补齐,char(n)占用n个字节,CHAR类型输出时会截断尾部的空格,即使 ...
- (转)system.badimageformatexception 未能加载文件或程序集
“/xxxxx”应用程序中的服务器错误. ------------------------------------------------------------------------------- ...
- Activity(活动)
- linux如何查询系统驱动是否支持该型号显卡
操作系统在做硬件适配时,经常会检查系统内核是否支持硬件的显卡:如果不支持,则一般是通过升级内核或者该型号对应品牌的显卡驱动来解决(开源或者闭源): 操作流程如下 1> 查询本机的显卡型号 因显卡 ...
- eclipse自动添加javadoc注释
参考文档: https://jingyan.baidu.com/article/36d6ed1f70ea9c1bce488350.html https://www.cnblogs.com/yangji ...
- Qt样式表的使用
Qt中可以灵活的使用层叠样式表(CSS),其语法和CSS很相似.因为HTML CSS的灵活性,所以可以很方便的为QT界面设计自己需要的外观.除了子类化Style类,使用QT样式表(QStyleShee ...
- Codeforces 787D. Legacy 线段树建模+最短路
D. Legacy time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...