这个代码的逻辑其实蛮简单的,就是用read()函数将对应的要拼接的部分,读入到一块儿缓存中(定义一个数组就行),最后用write()函数将切出来的对应的部分输出到要拼接的图片文件就大功告成。
值得注意的点:注意你的电脑的图片扫描方式是由上往下的还是由下往上 的 ,这会导致输入缓存的部分,和输出到指定文件的位置会和预期的不一样。

原理其实很简单,需要我们知道的是图片文件的数据存储方式和文件大小的计算(用来计算需要读取的文件大小);

BMP文件由以下四部分组成:

  • 位图文件头(BITMAPFILEHEADER)
  • 位图信息头(BITMAPINFOHEADER)
  • 颜色表*(RGBQUAD[])
  • 像素阵列(Pixels[][])

bmp图像空间大小计算:

文件大小=54(文件头)+ 分辨率*位深/8
                        分辨率=宽*高(如:1024*768,640*480)
                        位深:如24位,16位,8位
                        /8计算的是字节数。

例如:
                        一幅图像分辨率:1920*1080
                        大小=54+1920*1080*24/8=6220854

需要处理的图片:

1.bmp

2.bmp

代码:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char *argv[])
{int fd1 = open("./1.bmp", O_RDONLY);//打开图片1文件if(fd1 < 0){perror("open fd1");return -1;}int fd2 = open("./2.bmp", O_RDONLY);//打开图片2文件if(fd1 < 0){perror("open fd2");return -1;}int fd3 = open("./3.bmp", O_WRONLY | O_CREAT, 0666);//打开拼接的图片文件,没有则创建;if(fd1 < 0){perror("open fd3");return -1;}char head[54] = {0};//图片头文件的缓冲区char body1[1920*1080*24/8/2] ;//图片1其他文件缓冲区char body2[1920*1200*24/8/2] ;//图片2其他文件缓冲区//读取文件read(fd1, head, sizeof(head));read(fd1, body1, sizeof(body1));lseek(fd2, 54+sizeof(body2), SEEK_SET);read(fd2,body2,sizeof(body2));//写入文件write(fd3, head, sizeof(head));write(fd3, body1, sizeof(body1));write(fd3, body2, sizeof(body2));return 0;
} 

实现结果:

c语言实现图片拼接(linux)相关推荐

  1. linux sntp 代码,C语言window(linux)平台的SNTP实现

    C语言实现window(linux)平台的SNTP,本程序功能主要是实现电脑(或者设备)时间同步.摘录部分代码: unsigned char liVnMode; /* LeapSecond(2bits ...

  2. 用C语言编写一个Linux下的简单shell程序

    这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下: #include & ...

  3. linux环境c语言实现who,C语言编程实现Linux命令——who

    C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...

  4. C语言到嵌入式Linux开发项目指导

    C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...

  5. linux python开发环境sql数据迁移到mysql_运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库...

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mys ...

  6. C语言关键字restrict(linux 中为 “__restrict”)

    C语言关键字restrict(linux 中为 "__restrict") 关键字restrict只可用于指针,表明该指针是访问一个数据对象的惟一且初始的方式. 该关键字的作用是允 ...

  7. linux mysql c语言编程,在Linux下通过C语言操作MySQL数据库

    2010年1月27日 晚 22:10 作者:longyun(http://www.linuxdiyf.com/mailto:mtd527@gmail.com) 续:小弟最近想学习数据库,并想开发一个简 ...

  8. linux下c语言写文件,Linux下C语言之文件操作

    C语言库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS.Windows.Linux还是在VxWorks中都是这些函数: 创建和打开的函数: FILE *fopen(const cha ...

  9. R语言包在linux上的安装等知识

    有关install.packages()函数的详见:R包 package 的安装(install.packages函数详解) R的包(package)通常有两种: 1 binary package:这 ...

最新文章

  1. 帧间编码的预测自适应量化系数扫描排序
  2. 比特币地址可以查到本人吗_查看每一个地址有多少个比特币
  3. Recyclerview不显示内容
  4. wordpress 显示数学公式 (MathJax-LaTeX)
  5. 国产知名老牌 PDF 工具正式开源
  6. C++设计模式-装饰模式
  7. java游戏贪吃蛇_Java实现贪吃蛇游戏
  8. C++循环控制经典例题*
  9. RDP Wrapper 大于10.0.19041
  10. 程序员大保健指南,给自己的身心偶尔放松的机会
  11. 平面设计师主要做什么?平面设计的工作内容有哪些?
  12. SpringCloud Hoxton——Bus服务消息总线
  13. 计算请假时间(不算节假日)
  14. 区块链从业者地摊致富秘籍
  15. python 通达信公式函数_通达信zig函数的python实现
  16. 性能测试时那些「难以启齿」的问题-CPU相关
  17. Lattice Mico8在LMS上中断错误问题
  18. 弘辽科技:抖音电商,一场标准的「字节」式战役
  19. PCB应力应变测试分析结合IPC-9702和IPC-9704A标准
  20. 改进YOLOv5、YOLOv8系列:29.YOLOv5 结合 极简又强大的RepVGG 重参数化模型结构

热门文章

  1. 判断sql语句中exists的用法
  2. Google浏览器设置暗黑模式、隐身模式
  3. uniapp 如何使用SSR
  4. 收集总结java中压缩、解压文件方法
  5. 码农螺丝钉化的一种思考
  6. 一级造价工程师初始注册书面资料有哪些?
  7. 可自管理的分布式工作流引擎的设计与实现
  8. 阿里钉钉的操作指南是什么
  9. 水果店活动朋友圈文案怎么写,水果店文字文案这么写
  10. Kubernetes 用kubeadm安装kubernetes_v1.18.x