##

#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图片生成的更多相关文章

  1. linu下C语言之BMP图片操作编程(上)

    BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...

  2. 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题

    关于bmp图片的格式,网上有很多文章,具体可以参考百度百科,也有例子程序.这里只提要注意的问题. (1)结构体定义问题:首先按照百度百科介绍的定义了结构体,但是编译发现重定义BITMAPFILEHEA ...

  3. linu下C语言之BMP图片操作编程(下)

    前面提高了一个将BMP左转的程序,右转其实也是类似的操作,就不写了,这节,我们来实现,将一张BMP图进行灰度处理,代码贴上: #include <stdio.h> #include < ...

  4. linu下C语言之BMP图片操作编程(中)

    http://blog.csdn.net/morixinguan/article/details/50719472 关于BMP图的介绍之前已经说过了,最近要用到,又要重新开始学习. 现在实现一个让bm ...

  5. c语言数字图像处理(一):bmp图片格式及灰度图片转换

    本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...

  6. 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)

    稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像 ...

  7. 简单bmp图片处理工具——python实现

    预备实现功能: 1.读取bmp文件 2.保存bmp文件 3.对bmp图片进行放大.缩小 4.对bmp图片进行灰度化 5.对bmp图片进行旋转 bmp文件格式非常简单,对于我这种初学者来说减少了不少不必 ...

  8. bmp图片的有关操作

    读取bmp图片 并生成新的bmp图片 #include "stdafx.h"#include <windows.h>#include <cmath>#inc ...

  9. mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换等

    mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上) MP3文件格式(二)---ID3v2 图:ID3V1标签结构 图:ID3V2标签 ...

随机推荐

  1. 针对appium的webdriver执行swipe无效的解决办法

    self.driver.swipe(x1,y1,x2,y1,t) 当时代码里有如上这么一句,当时源码是这么说的: # convenience method added to Appium (NOT S ...

  2. 微信小程序之 ----API接口

    1. wx.request 接口    可在文件 wxs中操作,连接服务器处理数据    参数    ① url ② data ③ header ④ method ⑤ dataType   回调   ...

  3. JFinal Web开发学习(二)目录、架构、package设计

    package分类 config是JFinal的项目配置 controller是控制器 handler可以设置全局处理器,例如判断用户请求中是否直接请求 FreeMarker的模板文件ftl或者htm ...

  4. Java并发-多线程面试(全面)

    1. 什么是线程?2. 什么是线程安全和线程不安全?3. 什么是自旋锁?4. 什么是Java内存模型?5. 什么是CAS?6. 什么是乐观锁和悲观锁?7. 什么是AQS?8. 什么是原子操作?在Jav ...

  5. c#按照回车换行符分割字符串

    string str="aaa\r\nbbscccjdddseee"; string[] sArray=str.Split(new char[2] {'\r','\n'}); 和用 ...

  6. Liunx 硬盘分区

    1)什么要进行硬盘分区:a) 更容易管理和控制系统,因为相关的文件和目录都放在一个分区中.b) 系统效率更高.c) 可以限制用户使用硬盘的份额(磁盘空间的大小).d) 更容易备份和恢复. 2)硬盘的逻 ...

  7. Unknown type name 'NSString' 解决方案

    今天看到个问题,编辑工程提示Unknown type name 'NSString',如下图 导致出现异常的原因是是因为工程中添加了ZipArchive(第三方开源解压缩库) 一般情况下出现“Unkn ...

  8. BZOJ 1391 [CEOI] Order - 网络流 最大流

    Solution 非常简单的建边!!! 但是刚开始的代码不够体现社会主义的优越性, 于是我 .... 惨痛教训啊... 终于到了今天才能够体现社会主义优越性... Code #include<c ...

  9. 脚本路径问题_dirname

    pwd可获取命令当前的路径 可是若我们想在脚本中获取脚本所在文件夹的路径,这种方法是不够用的. 例如,我们的脚本放在/home/user/script/下,名字叫做getpath.sh getpath ...

  10. MySQL单行注释和多行释

    单行注释:# 或者 -- 多行注释:/* ... */ 使用 # 时,# 和注释的内容之间可以没有空格 使用 -- 时,-- 和注释内容之间必须有空格