##

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef unsigned char byte;
  6. typedef unsigned short dbyte;
  7. typedef unsigned long int dword;
  8. typedef unsigned short word;
  9.  
  10. /*******************************************
  11. *定义bmp文件的头部数据结构
  12. ********************************************/
  13. #pragma pack(push,2) //保持2字节对齐
  14.  
  15. struct tagBITMAPFILEHEADER {
  16. //bmp file header
  17. dbyte bfType; //文件类型
  18. dword bfSize; //文件大小,字节为单位
  19. word bfReserved1; //保留,必须为0
  20. word bfReserved2; //保留,必须为0
  21. dword bfOffBits; //从文件头开始的偏移量
  22.  
  23. //bmp info head
  24. dword biSize; //该结构的大小
  25. dword biWidth; //图像的宽度,以像素为单位
  26. dword biHeight; //图像的高度,以像素为单位
  27. word biPlanes; //为目标设备说明位面数,其值总是设为1
  28. word biBitCount; //说明比特数/像素
  29. dword biCompression; //图像数据压缩类型
  30. dword biSizeImage; //图像大小,以字节为单位
  31. dword biXPelsPerMeter; //水平分辨率,像素/米
  32. dword biYPelsPerMeter; //垂直分辨率,同上
  33. dword biClrUsed; //位图实际使用的彩色表中的颜色索引数
  34. dword biClrImportant; //对图像显示有重要影响的颜色索引的数目
  35.  
  36. //bmp rgb quad
  37. //对于16位,24位,32位的位图不需要色彩表
  38. //unsigned char rgbBlue; //指定蓝色强度
  39. //unsigned char rgbGreen; //指定绿色强度
  40. //unsigned char rgbRed; //指定红色强度
  41. //unsigned char rgbReserved; //保留,设置为0
  42. }BMPFILEHEADER;
  43. #pragma (pop)
  44.  
  45. struct tagBITMAPFILEHEADER *bmp_p; //定义bmp文件头结构体指针
  46. FILE *fd; //定义一个文件类型的指针
  47.  
  48. /*************************************************************
  49. *初始化bmp文件头部,设置bmp图片
  50. **************************************************************/
  51.  
  52. void Init_bmp_head(void)
  53. {
  54. bmp_p = &BMPFILEHEADER;
  55. bmp_p-> bfType = 0x4D42; //文件类型
  56. bmp_p-> bfSize = 0x25836; //文件大小,字节为单位
  57. bmp_p-> bfReserved1 = 0x0; //保留,必须为0
  58. bmp_p-> bfReserved2 = 0x0; //保留,必须为0
  59. bmp_p-> bfOffBits = 0x36; //从文件头开始的偏移量
  60.  
  61. //bmp info head
  62. bmp_p-> biSize = 0x28; //该结构的大小
  63. bmp_p-> biWidth = ; //图像的宽度,以像素为单位
  64. bmp_p-> biHeight = ; //图像的高度,以像素为单位
  65. bmp_p-> biPlanes = 0x01; //为目标设备说明位面数,其值总是设为1
  66. bmp_p-> biBitCount = ; //说明比特数/像素
  67. bmp_p-> biCompression = ; //图像数据压缩类型
  68. bmp_p-> biSizeImage = 0x25800;//0x09f8; //图像大小,以字节为单位
  69. bmp_p-> biXPelsPerMeter = 0x60;//0x60; //水平分辨率,像素/米
  70. bmp_p-> biYPelsPerMeter = 0x60; //垂直分辨率,同上
  71. bmp_p-> biClrUsed = ; //位图实际使用的彩色表中的颜色索引数
  72. bmp_p-> biClrImportant = ; //对图像显示有重要影响的颜色索引的数目
  73.  
  74. }
  75.  
  76. int main(void)
  77. {
  78. static char *file_name =NULL; //保存文件名的指针
  79. static long file_length = 0x25836; //文件的大小(整个文件)
  80. unsigned char *file_p = NULL; //写入数据指针
  81. unsigned char *file_p_tmp = NULL; //写入数据临时指针
  82. unsigned char *byte_copy_p = NULL; //文件头部传递指针
  83. unsigned char byte_copy = ; //文件头部数据拷贝变量
  84. int i = ;
  85. file_name = "test1.bmp";
  86. Init_bmp_head();
  87. file_p = (unsigned char *)malloc(sizeof(char)*); //申请一段内存
  88. file_p_tmp = file_p;
  89. for(i = ;i < ;i++ )
  90. {
  91. if(i% ==)
  92. {
  93. *file_p_tmp = 0x00; //图像前8位值
  94. }
  95. else
  96. {
  97. *file_p_tmp = 0xf0; //图像后8位值
  98. }
  99. file_p_tmp++;
  100. }
  101. byte_copy_p = (unsigned char *)bmp_p;
  102. file_p_tmp = file_p;
  103. for(i = ;i < ;i++)
  104. {
  105. *file_p_tmp = *byte_copy_p;
  106. file_p_tmp++;
  107. byte_copy_p++;
  108. }
  109. fd = fopen(file_name, "w");
  110. fwrite(file_p, file_length, ,fd);
  111. free(file_p); //释放申请的内存(重要)
  112. fclose(fd);
  113. printf("Done success!!!\n");
  114. getchar();
  115. return ();
  116. }

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. mysql 数据库备份的多种方式

    一.使用mysqldump进行备份 1.完整备份所有数据库 mysqldump -u root -p --all-databases > E:/all.sql 在mysql8之前,存储过程和事件 ...

  2. 进程同步(multiprocess.Lock、multiprocess.Semaphore、multiprocess.Event) day38

    进程同步(multiprocess.Lock.multiprocess.Semaphore.multiprocess.Event) 锁 —— multiprocess.Lock 通过刚刚的学习,我们千 ...

  3. 内置函数 hashlib configparser logging 模块 C/S B/S架构

    1.内置函数 # 内置的方法有很多 # 不一定全都在object中 # class Classes: # def __init__(self,name): # self.name = name # s ...

  4. 8.Mysql数据类型选择

    8.选择合适的数据类型8.1 CHAR与VARCHAR CHAR固定长度的字符类型,char(n) 当输入长度不足n时将用空格补齐,char(n)占用n个字节,CHAR类型输出时会截断尾部的空格,即使 ...

  5. (转)system.badimageformatexception 未能加载文件或程序集

    “/xxxxx”应用程序中的服务器错误. ------------------------------------------------------------------------------- ...

  6. Activity(活动)

  7. linux如何查询系统驱动是否支持该型号显卡

    操作系统在做硬件适配时,经常会检查系统内核是否支持硬件的显卡:如果不支持,则一般是通过升级内核或者该型号对应品牌的显卡驱动来解决(开源或者闭源): 操作流程如下 1> 查询本机的显卡型号 因显卡 ...

  8. eclipse自动添加javadoc注释

    参考文档: https://jingyan.baidu.com/article/36d6ed1f70ea9c1bce488350.html https://www.cnblogs.com/yangji ...

  9. Qt样式表的使用

    Qt中可以灵活的使用层叠样式表(CSS),其语法和CSS很相似.因为HTML CSS的灵活性,所以可以很方便的为QT界面设计自己需要的外观.除了子类化Style类,使用QT样式表(QStyleShee ...

  10. Codeforces 787D. Legacy 线段树建模+最短路

    D. Legacy time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...