C语言读写图片文件问题
对于C语言的读写文件问题,现在我的思维好乱谁可以帮我整理下?写BMP图片文件时要偏移头信息再写,那为什么txtdoc则不用,难道它没有头信息,还是有,是我没发现?dat文...
对于C语言的读写文件问题,现在我的思维好乱谁可以帮我整理下?
写BMP图片文件时要偏移头信息再写,那为什么txt doc则不用,难道它没有头信息,还是有,是我没发现?dat文件要偏移吗?幻灯片呢?我是不是走进一个误区里了?请高手指教~~急~~~~ 展开
写BMP图片文件时要偏移头信息再写,那为什么txt doc则不用,难道它没有头信息,还是有,是我没发现?dat文件要偏移吗?幻灯片呢?我是不是走进一个误区里了?请高手指教~~急~~~~ 展开
8个回答
展开全部
BMP位图文件有它的属性,我们如果不读取他的属性的话,无法对它的操作,
所以BMP位图文件包括1.位图文件头(记录位图文件的特征.到真正图像数据的偏
移量.文件大小等等信息)2.位图信息头(记录的就是位图的大小,每个像素占的位
数,是否压缩等等信息)3.调色板(如果位图信息头里面的每个像素的位数小于24
位,就需要调色板)4真正的位图数据.
为什么产生误区我觉得真正的原因是你没有明白什么是文件.
文件就是把一些数据组织起来,并保存它们.
而正因为数据的组织不同,所以就构成了不同的文件类型.
而文件的后缀名是文件被组织了后,人民为了区别它和其他文件格式的不同而自
己取的一个名字.
比方说,我这个数据是按文本组织的。那么你不管把改为什么后缀名,它还是文本
文件.
以后学文件的时候别看它的后缀名,而要看它的文件的存贮实质.
人们开发出来的文件格式,都有他们不同的组织方式,不是说BMP有头信息,
人家一定都要有.
所以BMP位图文件包括1.位图文件头(记录位图文件的特征.到真正图像数据的偏
移量.文件大小等等信息)2.位图信息头(记录的就是位图的大小,每个像素占的位
数,是否压缩等等信息)3.调色板(如果位图信息头里面的每个像素的位数小于24
位,就需要调色板)4真正的位图数据.
为什么产生误区我觉得真正的原因是你没有明白什么是文件.
文件就是把一些数据组织起来,并保存它们.
而正因为数据的组织不同,所以就构成了不同的文件类型.
而文件的后缀名是文件被组织了后,人民为了区别它和其他文件格式的不同而自
己取的一个名字.
比方说,我这个数据是按文本组织的。那么你不管把改为什么后缀名,它还是文本
文件.
以后学文件的时候别看它的后缀名,而要看它的文件的存贮实质.
人们开发出来的文件格式,都有他们不同的组织方式,不是说BMP有头信息,
人家一定都要有.
展开全部
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 ;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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");
}
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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,看你读写什么样的图片文件格试。常见的有jpg与bmp两种格试。
如果是bmp图片,先读取前面的字节判读图片的相关数据,如分辨率、文件大小之类的属性。然后再读取实体rgb数据,然后再做后续处理
如果时jpg图片,则先解压成bmp图片,可以使用windows的画图工具进行转换。
下面是我的一个C语言读写图片例子
http://download.csdn.net/detail/u013273147/8787773
如果是bmp图片,先读取前面的字节判读图片的相关数据,如分辨率、文件大小之类的属性。然后再读取实体rgb数据,然后再做后续处理
如果时jpg图片,则先解压成bmp图片,可以使用windows的画图工具进行转换。
下面是我的一个C语言读写图片例子
http://download.csdn.net/detail/u013273147/8787773
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
txt 文件不用偏移,因为他只关系存入的字符。你说DOC 没有偏移头么?那你用记事本打开看看是不是乱码?这就是说也有一定的,因为DOC也可以保存图像在里面,就要对图像的一些特性做好说明。BMP图片文件出一样,他要保存存所用的色深,宽度长度调色板等,不然你画了一张256色的图,我用16色打开,那你说会怎样?
有了信息头,这样程序就能从文件读取相应参数给程序,以能正确显示图象。
有了信息头,这样程序就能从文件读取相应参数给程序,以能正确显示图象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询