c语言实现图片拼接(linux)
这个代码的逻辑其实蛮简单的,就是用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)相关推荐
- linux sntp 代码,C语言window(linux)平台的SNTP实现
C语言实现window(linux)平台的SNTP,本程序功能主要是实现电脑(或者设备)时间同步.摘录部分代码: unsigned char liVnMode; /* LeapSecond(2bits ...
- 用C语言编写一个Linux下的简单shell程序
这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下: #include & ...
- linux环境c语言实现who,C语言编程实现Linux命令——who
C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...
- C语言到嵌入式Linux开发项目指导
C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...
- linux python开发环境sql数据迁移到mysql_运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库...
运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mys ...
- C语言关键字restrict(linux 中为 “__restrict”)
C语言关键字restrict(linux 中为 "__restrict") 关键字restrict只可用于指针,表明该指针是访问一个数据对象的惟一且初始的方式. 该关键字的作用是允 ...
- linux mysql c语言编程,在Linux下通过C语言操作MySQL数据库
2010年1月27日 晚 22:10 作者:longyun(http://www.linuxdiyf.com/mailto:mtd527@gmail.com) 续:小弟最近想学习数据库,并想开发一个简 ...
- linux下c语言写文件,Linux下C语言之文件操作
C语言库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS.Windows.Linux还是在VxWorks中都是这些函数: 创建和打开的函数: FILE *fopen(const cha ...
- R语言包在linux上的安装等知识
有关install.packages()函数的详见:R包 package 的安装(install.packages函数详解) R的包(package)通常有两种: 1 binary package:这 ...
最新文章
- 帧间编码的预测自适应量化系数扫描排序
- 比特币地址可以查到本人吗_查看每一个地址有多少个比特币
- Recyclerview不显示内容
- wordpress 显示数学公式 (MathJax-LaTeX)
- 国产知名老牌 PDF 工具正式开源
- C++设计模式-装饰模式
- java游戏贪吃蛇_Java实现贪吃蛇游戏
- C++循环控制经典例题*
- RDP Wrapper 大于10.0.19041
- 程序员大保健指南,给自己的身心偶尔放松的机会
- 平面设计师主要做什么?平面设计的工作内容有哪些?
- SpringCloud Hoxton——Bus服务消息总线
- 计算请假时间(不算节假日)
- 区块链从业者地摊致富秘籍
- python 通达信公式函数_通达信zig函数的python实现
- 性能测试时那些「难以启齿」的问题-CPU相关
- Lattice Mico8在LMS上中断错误问题
- 弘辽科技:抖音电商,一场标准的「字节」式战役
- PCB应力应变测试分析结合IPC-9702和IPC-9704A标准
- 改进YOLOv5、YOLOv8系列:29.YOLOv5 结合 极简又强大的RepVGG 重参数化模型结构