##

#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. gearman中任务的优先级和返回状态

    gearman中任务的优先级和返回状态 一.任务的优先级 同步阻塞调用,等待返回结果 doLow:最低优先 doNomal:正常优先级 doHigh:最优先执行 异步派发任务,不等待返回结果,返回任务 ...

  2. gearman中worker常驻后台,导致MySQL server has gone away

    产生这个原因主要有如下几点: 1.mysql服务宕机了 2.长时间没有操作,超过了wait_timeout的设置,mysql自动断开 3.mysql请求链接被主动kill 4.发送的请求或返回结果过大 ...

  3. PHP的网站主要攻击方式有哪些?

    1.命令注入(Command Injection) 2.eval注入(Eval Injection) 3.客户端脚本攻击(Script Insertion) 4.跨网站脚本攻击(Cross Site ...

  4. Spring Boot 2.0(三):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  5. How to use GM MDI interface for programming

    GM has had its newest programming/J2534 Pass Thru device on the market for some years now. A lot has ...

  6. delphi程序设计改进可读性一法

    Delphi,Lazarus程序设计改进一法 作者:steven QQ:1565498246 Delphi/Lazarus有一个思想就是方法.函数名调用,后边可以不使用括号(),比如调用函数Now,这 ...

  7. MySQL表的相关操作

    操作数据表之前,必须先选择相应数据表所在的数据库 mysql> USE databaseName; -- 选择数据库 查看该数据库下的数据表 mysql> show tables; 确定数 ...

  8. Ubuntu安装R及R包

    安装R $sudo apt-get update $sudo apt-get install r-base $sudo apt-get install r-base-dev 安装一些可能的依赖包 $s ...

  9. Linux安装及入门

    Linux安装及学习 Linux遇到的问题: 在安装过程中因为代码输错(少空格)而质疑自己下载的ubuntu和virtualbox版本,于是卸载之后重新安装了一次,后来才发现是代码输错了(教程中的空格 ...

  10. 句子相似度_tf/idf

    import mathfrom math import isnanimport pandas as pd#结巴分词,切开之后,有分隔符def jieba_function(sent): import ...