//#pragma pack(1)
typedef unsigned char  BYTE;
typedef unsigned short  WORD;
typedef unsigned int  DWORD; // 会出现bmp 头 信息不对 将long 改为int        //  结构体添加 __attribute__((packed))typedef struct tagBITMAPFILEHEADER{WORD     bfType;        //Linux此值为固定值,0x4d42      DWORD    bfSize;        //BMP文件的大小,包含三部分        WORD    bfReserved;    //置0      WORD    bfReserved2; //保留,0DWORD    bfOffBits;     //文件起始位置到图像像素数据的字节偏移量        }__attribute__((packed)) BITMAPFILEHEADER;//__attribute__((packed))typedef struct tagBITMAPINFOHEADER{DWORD    biSize;          //文件信息头的大小,40     DWORD    biWidth;         //图像宽度  DWORD    biHeight;        //图像高度   WORD     biPlanes;        //BMP存储RGB数据,总为1   WORD     biBitCount;      //图像像素位数,笔者RGB位数使用24     DWORD    biCompression;   //压缩 0:不压缩  1:RLE8 2:RLE4    DWORD    biSizeImage;     //4字节对齐的图像数据大小  DWORD    biXPelsPerMeter; //水平分辨率  像素/米DWORD    biYPelsPerMeter;  //垂直分辨率  像素/米DWORD    biClrUsed;        //实际使用的调色板索引数,0:使用所有的调色板索引      DWORD    biClrImportant;
}__attribute__((packed)) BITMAPINFOHEADER;typedef struct tagRGBQUAD {
BYTE    rgbBlue;
BYTE    rgbGreen;
BYTE    rgbRed;
BYTE    rgbReserved;
} RGBQUAD;static void SaveImage(int width, int height, const void* buffer, const char* path)
{//Set BITMAPINFOHEADER
BITMAPINFOHEADER bi;
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = width;
bi.biHeight = -height;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = 0;
bi.biSizeImage = ((width*height) <<2);
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;//Set BITMAPFILEHEADER
BITMAPFILEHEADER bf;
bf.bfType = 0x4d42;
bf.bfSize = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER) + bi.biSizeImage;
bf.bfReserved = 0;
bf.bfReserved2 = 0;
bf.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);FILE* fp;
if((fp = fopen(path, "wb")) == NULL)return;fwrite(&bf,sizeof(BITMAPFILEHEADER),1,fp);                      //写入文件头
fwrite(&bi,sizeof(BITMAPINFOHEADER),1,fp);                      //写入信息头
fwrite(buffer,bi.biSizeImage,1,fp); //写入图像数据
fclose(fp);
}int main()
{int count = 0;char num[100];snprintf(num, 100, "/home/leizhang/Documents/picture/%d.bmp", count);SaveImage(width, height, buffer, num);
}

linux 可能会出现bmp文件头信息不对需要将

typedef unsigned int  DWORD; // 会出现bmp 头 信息不对 将long 改为int        
结构体添加 __attribute__((packed))

linux 保存bmp 图片相关推荐

  1. framebuffer 保存 bmp图片格式

    最近需要完成一个从framebuffer中进行读取,然后将内存的东西保存为bmp图片格式,我的其他博客内容对framebuffer进行详细的讲解,以及bmp的格式进行详细的讲解. 之前从网上看到了一些 ...

  2. Linux下BMP图片截图

    Linux下BMP图片截图   MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持.随着Windows操作系统的流行与丰富的W ...

  3. Linux下BMP图片添加水印

    Linux下BMP图片添加水印   BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持.随着Windows操作系统的流行与丰 ...

  4. C++ 保存bmp图片

    在 C 语言中,你可以使用 Windows 图像处理库(Windows GDI)来保存 BMP 图片.你需要使用到两个重要的函数:CreateBitmap 和 SaveBitmap. CreateBi ...

  5. Linux下BMP图片缩放

    Linux下BMP图片缩放   MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持.随着Windows操作系统的流行与丰富的W ...

  6. linux下BMP图片旋转

    linux下BMP图片旋转   MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持.随着Windows操作系统的流行与丰富的W ...

  7. 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现

    通过我这些天用C++读写bmp图像的经历,摸索再摸索,终于对bmp文件的结构.操作有了一定的了解,下面就大概介绍bmp图片纯C++的读取.旋转和保存的实现过程. 要用C++读取bmp图片文件,首先要弄 ...

  8. 将OpenGL渲染的结果保存为图片

    概述 所需要做的很简单,就是使用glReadPixels函数来获取OpenGL当前渲染出的像素数据,主要参考了 opengl 保存渲染好的图像_szfhy的博客-CSDN博客_opengl保存图像. ...

  9. Java_最不重要位替换(LSB)基于24位BMP图片

    隐写术的一个简单示例 向BMP图片中隐藏一段文字并保存,从保存的图片中提取文字. 原理:把需要隐藏的文本信息转换成二进制字符流,再将其拆分成一个个的0和1,隐藏在像素数据(RGB字节)中,因对RGB的 ...

  10. Linux系统笔记:shell命令、文件系统、Vi编辑器、文件IO、mmap()、bmp图片格式、线程

    文章目录 一.shell命令集 二.ubuntu文件系统 三.vi编辑器 四.文件IO 五.Linux中C库mmap()函数详解 六.bmp图片格式详解 七.C语言笔记 (一)标准IO函数 time( ...

最新文章

  1. Open3D点云处理算法最全合集
  2. 在Windows Mobile和Wince(Windows Embedded CE)下进行Native C++开发,如何取出当前执行文件的路径和调用模块的路径...
  3. spring4-3-AOP-面向切面编程
  4. 数学之路(2)-数据分析-R基础(5)
  5. nginx tcp代理_nginx——TCP/UDP Load Balancing
  6. 《深入理解OSGi:Equinox原理、应用与最佳实践》一2.2 Bundle
  7. Android通用流行框架大全
  8. 前端第一天 HTML基础
  9. (王道408考研数据结构)第八章排序-第二节:直接插入排序和希尔排序
  10. jmeter跨线程组传多个值_jmeter多用户登录跨线程组操作传值
  11. 清除实例或静态事件的所有事件侦听器
  12. 观察者模式(发布--订阅模式)
  13. JavaScript与JSP区别
  14. 苹果手机其他占内存很大去哪删除_Iphone内存总是不够用?原来这才是正确清理垃圾的方法,长见识了...
  15. 【译】jquery基础教程(jQuery Fundamentals)——(第一部分)概述
  16. 【转】恢复默认vs2005
  17. android app入口函数,Android App程序运行过程 ActivityThread.main()------详解系列(一)...
  18. python locale.setlocale_语言环境.setlocale(LC_NUMERIC):如何使其在Windows上运行
  19. KALI2021安装teemo的一些问题
  20. html绘制钟表的原理,html5 canvas绘制钟表

热门文章

  1. 我对于创业公司的看法
  2. python中keys是什么意思_python中的key是什么意思
  3. windows影音制作工具安装教程
  4. java接口对带宽的要求,常见的接口带宽分析
  5. 如何管理好团队?史玉柱自述
  6. 计算机与资源管理器有何区别,在win7中双击打开计算机和右击打开资源管理器有什么区别...
  7. 117道有关大数据面试题解析,希望对你有所帮助
  8. 打开dashboard报错:xcelsius已经停止工作
  9. 电子警察系统设计(原理+流程+论文)
  10. vue的echarts的折线图、柱状图、折线图的使用