C语言读写图片文件问题

对于C语言的读写文件问题,现在我的思维好乱谁可以帮我整理下?写BMP图片文件时要偏移头信息再写,那为什么txtdoc则不用,难道它没有头信息,还是有,是我没发现?dat文... 对于C语言的读写文件问题,现在我的思维好乱谁可以帮我整理下?
写BMP图片文件时要偏移头信息再写,那为什么txt doc则不用,难道它没有头信息,还是有,是我没发现?dat文件要偏移吗?幻灯片呢?我是不是走进一个误区里了?请高手指教~~急~~~~
展开
 我来答
14566666
推荐于2016-08-24 · TA获得超过1382个赞
知道小有建树答主
回答量:905
采纳率:50%
帮助的人:272万
展开全部
BMP位图文件有它的属性,我们如果不读取他的属性的话,无法对它的操作,

所以BMP位图文件包括1.位图文件头(记录位图文件的特征.到真正图像数据的偏

移量.文件大小等等信息)2.位图信息头(记录的就是位图的大小,每个像素占的位

数,是否压缩等等信息)3.调色板(如果位图信息头里面的每个像素的位数小于24

位,就需要调色板)4真正的位图数据.

为什么产生误区我觉得真正的原因是你没有明白什么是文件.

文件就是把一些数据组织起来,并保存它们.

而正因为数据的组织不同,所以就构成了不同的文件类型.

而文件的后缀名是文件被组织了后,人民为了区别它和其他文件格式的不同而自

己取的一个名字.

比方说,我这个数据是按文本组织的。那么你不管把改为什么后缀名,它还是文本

文件.

以后学文件的时候别看它的后缀名,而要看它的文件的存贮实质.

人们开发出来的文件格式,都有他们不同的组织方式,不是说BMP有头信息,

人家一定都要有.
tattackor
2015-06-11 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:891万
展开全部

1.图片也是属于文件类型的一种,图片属于二进制文件。使用fopen函数的二进制模式“rb”就可以打开。

2.例程:

    #include <stdlib.h>
    #include <stdio.h>
    int main ()
    {
        FILE * fpPhoto, * fpText, * fpTarget ;
        int     iRead ;
        char    szBuf[100] ;
          
        printf ("请输入第一个文件名(bmp):\n") ;
        gets (szBuf) ;
        fpPhoto = fopen (szBuf, "rb") ;
        printf ("请输入第二个文件名(txt):\n") ;
        gets (szBuf) ;
        fpText = fopen (szBuf, "rb") ;
        printf ("请输入目的文件名(bmp):\n") ;
        gets (szBuf) ;
        fpTarget = fopen (szBuf, "wb") ;
      
        if (!fpPhoto || !fpText || !fpTarget)
        {
            printf ("打开文件失败!\n") ;
            system("pause") ;
            return -1 ;
        }
      
        while ((iRead = fread (szBuf, 1, sizeof (szBuf), fpPhoto)) > 0)
            fwrite (szBuf, 1, iRead, fpTarget) ;
        while ((iRead = fread (szBuf, 1, sizeof (szBuf), fpText)) > 0)
            fwrite (szBuf, 1, iRead, fpTarget) ;
      
        fclose (fpPhoto) ;
        fclose (fpText) ;
        fclose (fpTarget) ;
        return 0 ;
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
余方正舒
2015-08-11 · TA获得超过1.4万个赞
知道大有可为答主
回答量:5882
采纳率:48%
帮助的人:2631万
展开全部
#include<stdio.h>

char *base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
union
{
struct
{
unsigned long d:6;
unsigned long c:6;
unsigned long b:6;
unsigned long a:6;
}s;
unsigned char c[3];
}u;
int main()
{
FILE *fp,*fq;
fp = fopen("C:\\input.jpg" , "r");//如果用txt文件可以正常处理,现在想处理图像文件
fq = fopen("C:\\output.jpg" , "w");//如果用txt文件可以正常处理
base64encode(fp,fq);
fclose(fp);
fclose(fq);
}
base64encode(FILE *fp,FILE *fq)
{
int ch,n,h=0,flag=0;
while(1)
{
u.c[0]=u.c[1]=u.c[2]=0;
for (n=0;n<3;n++)
{
ch=fgetc(fp);
if (ch==EOF) break;
u.c[2-n]=ch;
}
if(n==0) {flag = 1 ; break;}
switch(n)
{
case 1: fprintf(fq,"%c%c==",base[u.s.a],base[u.s.b]);break;
case 2: fprintf(fq,"%c%c%c=",base[u.s.a],base[u.s.b],base[u.s.c]);break;
case 3: fprintf(fq,"%c%c%c%c",base[u.s.a],base[u.s.b],base[u.s.c],base[u.s.d]);break;
}
if (h==15) { h=0; fprintf(fq,"\n"); } else h++;
}
if (flag&&h) fprintf(fq,"\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梁昌仔
2015-07-15 · TA获得超过272个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:203万
展开全部
首先,看你读写什么样的图片文件格试。常见的有jpg与bmp两种格试。
如果是bmp图片,先读取前面的字节判读图片的相关数据,如分辨率、文件大小之类的属性。然后再读取实体rgb数据,然后再做后续处理
如果时jpg图片,则先解压成bmp图片,可以使用windows的画图工具进行转换。
下面是我的一个C语言读写图片例子
http://download.csdn.net/detail/u013273147/8787773
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ryw12403
2008-10-12 · TA获得超过1899个赞
知道大有可为答主
回答量:2501
采纳率:0%
帮助的人:2100万
展开全部
txt 文件不用偏移,因为他只关系存入的字符。你说DOC 没有偏移头么?那你用记事本打开看看是不是乱码?这就是说也有一定的,因为DOC也可以保存图像在里面,就要对图像的一些特性做好说明。BMP图片文件出一样,他要保存存所用的色深,宽度长度调色板等,不然你画了一张256色的图,我用16色打开,那你说会怎样?
有了信息头,这样程序就能从文件读取相应参数给程序,以能正确显示图象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式