fread,fopen二进制打开图片并复制图片

Posted jianmoxiansheng-guo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread,fopen二进制打开图片并复制图片相关的知识,希望对你有一定的参考价值。

思路:

    1. 使用二进制的格式打开我们要读取的图片“./temp.png”,注意读取的格式“rb”,b:二进制
    2. 接着就可以创建并以二进制的格式打开我们要写入到的文件当中“.png”,注意打开格式”wb“。
    3. 接着我们用fseek来测量这个图片一共有多少个字节:
      1. 我们可以把光标设置到文件的尾部。
      2. 接着使用ftell()函数来获取长度length。
      3. 注意,由于我们还要读取文件,所以要把光标设置回文件的开头。
    4. 接着使用fread读取:
      1. 每次读取BYTE为要读取的每个元素的大小,以字节为单位。
      2. length:这是元素的个数,每个元素的大小为BYTE 字节。
      3. 因为我使用的是ubuntu,所以没有BYTE这个数据类型,所以需要自己define。
    5. 接着就是fwrite,和read参数大致意思一样。
    6. 最后:注意close你已经打开的文件
    7. 看一下我成功之后的结果:

      技术图片
    8.          

          技术图片

 

     8. 图片这里就不展示了,当然是成功的。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define BYTE unsigned char
 5 int main(){
 6     BYTE *buffer;
 7 
 8     FILE *pixmap = fopen("./temp.png","rb");
 9 
10     fseek(pixmap,0, SEEK_END);
11 
12     
13     int length = ftell(pixmap);//读取图片的大小长度
14     FILE *fp = fopen("./t.png","wb");
15 
16     buffer = (BYTE *)malloc(length*sizeof(BYTE));
17 
18     fseek(pixmap, 0, SEEK_SET);//把光标设置到文件的开头
19 
20     while(0 !=fread(buffer,sizeof(BYTE),length,pixmap))
21     {
22             printf("%s
----%ld",buffer,strlen(buffer));
23             fwrite(buffer,sizeof(BYTE),length,fp);
24     }
25 
26     fclose(pixmap);
27     fclose(fp);
28 }

 

以上是关于fread,fopen二进制打开图片并复制图片的主要内容,如果未能解决你的问题,请参考以下文章

Linux 打开文件并写入一段字符串,同一时候读出相应文件的信息--fopen()/fwrite()/fread()

php将图片文件转换成二进制输出的方法

怎样在C语言中实现用socket传送图片

如何使用fread函数循环读取二进制文件

matlab 打开bin文件 并转换成为txt文件,送上所有积分

文件复制二进制版