① C语言如何读取jpg格式的图片
有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:无关数据区JPG图片数据区无关数据区JPG图片数据区无关数据区JPG图片数据区……已知JPG图片起始标志为:“FF D8 FF E0 00 10 4A”,结束标志为:“FF D9”。现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?帮你写了个程序, 测试了只含有一个图片信息的文件int len=0;int filesn=0;void ReadJpg(CFile *sfp,const char *dstfile,unsigned char a,unsigned char b){CFile nf;nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);unsigned t=0,t1=0;nf.Write(&a,sizeof(char));nf.Write(&b,sizeof(char));while(1){sfp->Read(&t,sizeof(char));len++;nf.Write(&t,sizeof(char));if(t==0xFF){sfp->Read(&t1,sizeof(char));len++;if(t1==0xD9)break;elsenf.Write(&t1,sizeof(char));}}nf.Close();}调用:void test() {CFile fp;fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary);//文件名改一下unsigned char a=0,b=0;len=0;while(1){fp.Read(&a,sizeof(char));len++;if(len>=fp.GetLength())break;if(a==0xFF){fp.Read(&b,sizeof(char));len++;if(b==0xD8){filesn++;char filename[256];sprintf(filename,"Jpg %d.jpg",filesn);ReadJpg(&fp,filename,a,b);}}}fp.Close();}思路是,先得到FF的值,然后再判断下一位是否是0xD8, 但这里要说明一下,如果你的其它数据信息里也含有FF D8值的话就会出错了, 所以为保险起见,应该再多比较几位, JPG的头是固定的,再往下就是EF E0 00 1E, 建议楼主再往下比较四位比较保险(在程序中稍作修改即可)你是不是在 分析某个 游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个 索引文件!或在其文件自身。索引可以列表索引,链表形示……如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!
② c语言读取二进制数据文件
1、二进制文本使用fopen函数的二进制模式“rb”就可以打开。对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。 C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。2、fopen的函数原型:FILE * fopen(const char * path,const char * mode); fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,允许读数据。rw+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)wb 只写打开或新建一个二进制文件;只允许写数据。wb+ 读写打开或建立一个二进制文件,允许读和写。wt+ 读写打开或着建立一个文本文件;允许读写。at+ 读写打开一个文本文件,允许读或在文本末追加数据。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。3、例程: #include <stdlib.h> #include <stdio.h> int main () { FILE * fpPhoto, * fpText, * fpTarget ; int iRead ; char szBuf[100] ; printf ("请输入第一个文件名(jpg):\n") ; gets (szBuf) ; fpPhoto = fopen (szBuf, "rb") ; printf ("请输入第二个文件名(txt):\n") ; gets (szBuf) ; fpText = fopen (szBuf, "rb") ; printf ("请输入目的文件名(jpg):\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 ; }
③ 如何将图片用二进制格式读取高手请进
FILE*pFile=fopen("C:\\aaa.bmp","rb");BYTEbuf[MAXLEN]={0};//MAXLEN图片大小自己确定,也可以动态分配.intSize=fread(buf,1,MAXLEN,pFile);//size是实际读取的大小,buf中就是存的版你想要的数权据了.
④ c/c++ cgi程序如何输出图片和其它二进制文件
cgi输出图片和其他二进制文件是需要区别对待的。主要差别在于设置好返回的response-head部分的mime-type。图片应该是image/jpeg,而二进制文件下载应该是application/octet-stream,当然还需要处理一下content-length这个头部。至于说内容,不论用read还是fread源文件数据后,通过write或者fwrite到stdout(write用句柄1)就可以了
⑤ 如何用c语言读取图片
#include
using namespace std;
#define Twoto1(i,j,w) i*w+j
void createimage(unsigned char *&img, int w, int h)
{img = new unsigned char[w*h];}
void delateimage(unsigned char*img)
{delete []img;}
void readimage(unsigned char*img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp,fname, "rb");
if (fp == NULL){ cout << "error" << endl; return; }
size_t result;
result=fread(img , sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Reading error" << endl;
return;
}
else
cout << "Reading Ok!" << endl;
fclose(fp);
}
void mobanjuanji(unsigned char image, unsigned char*image1, int w, int h, float moban[5][5])
{
for (int i = 0; i for (int j = 0; j if (iw – 3 || j>h – 3)
image1[Twoto1(i,j,w)] = 0;
else
{
float temp = 0;
for (int m = 0; m<5; m++)
for (int n = 0; n<5; n++)
{
temp += (image[Twoto1(i-2+m,j-2+n,w)] moban[m][n]);
}
if (temp>255) image1[Twoto1(i, j, w)] = 255;
else if (temp<0) image1[Twoto1(i, j, w)] = 0;
else image1[Twoto1(i, j, w)] = temp;
}
}
void saveimage(unsigned char *img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp, fname, "wb");
if (fp == NULL) { cout << "error" << endl; return; }
size_t result;
result = fwrite(img, sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Write error" << endl;
return;
}
else
cout << "Write Ok!" << endl;
fclose(fp);
}
void main()
{
unsigned char *img;
unsigned char *img1;
float moban[5][5] = { {0,0,0,0,0},{0, -1, 0, 1, 0 }, { 0, -2, 0, 2, 0 }, { 0, -1, 0, 1, 0 }, { 0,0,0,0,0 } };
//float moban[5][5] = { 0 };
int w = 512, h = 512;
createimage(img, w, h);
createimage(img1, w, h);
readimage(img, w, h, "E:ss.raw");
mobanjuanji(img, img1,w, h, moban);
saveimage(img, w, h, "E:ss_1.raw");
saveimage(img1, w, h, "E:ss_2.raw");
delateimage(img);
delateimage(img1);
}
(5)c读取jpg文件二进制扩展阅读
C语言实现一个图片的读出和写入
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//获取文件名为filename的文件大小。
{
FILE *fp = fopen(filename, "rb");//打开文件。
int size;
if(fp == NULL) // 打开文件失败
return -1;
fseek(fp, 0, SEEK_END);//定位文件指针到文件尾。
size=ftell(fp);//获取文件指针偏移量,即文件大小。
fclose(fp);//关闭文件。
return size;
}
int main ()
{
int size=0;
size=file_size("qw");
printf("%d",size);
FILE * pFile,*qw;
char *buffer=(char*)malloc(sizeof(char)*size);
qw =fopen("qw","r");
pFile = fopen ( "qwe" , "wb" );
printf("%d==",pFile);
printf("%d",size);
fread(buffer,1,size,qw);
fwrite (buffer , sizeof(byte), size , pFile );
fclose (pFile);
rename("qwe","Groot.jpg");
return 0;
}
⑥ 怎么把JPG格式图片转化成二进制数据。
作为2二进制文件打开,一个字节一个字节地读入,写出,直到EOF(文件结束符)。当然写出时要按数据库约定的方式。下面作为普通文件输出FILE *fin,*fout;void main(){int c;fin=fopen( ck.jpg,rb); // 作为2二进制文件打开fout=fopen(tmp.jpg,wb);while(1){c=fgetc(fin); // 一个字节一个字节地读入fputc ( c , fout ); // 改此句,让它符合数据库约定。}}
⑦ C语言读取二进制文件的问题
打开文件的时候加上加binary 要使用二进制方式读取0A和1A都是特殊字符 一个回车 一个eof~
⑧ 如何用c语言以二进制流的方式读取并显示gif文件
二进制打开文件fopen(filename,"rd")二进制读可以用 fscanf()#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){FILE * fp;char * filename = "test.dat";int i;char str[128];if( (fp=fopen(filename,"rb"))== NULL ){
⑨ 用c语言如何读取和保存jpg图片文件
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//获取文件名为filename的文件大小。
{
FILE *fp = fopen(filename, "rb");//打开文件。
int size;
if(fp == NULL) // 打开文件失败
return -1;
fseek(fp, 0, SEEK_END);//定位文件指针到文件尾。
size=ftell(fp);//获取文件指针偏移量,即文件大小。
fclose(fp);//关闭文件。
return size;
}
int main ()
{
int size=0;
size=file_size("qw");
printf("%d",size);
FILE * pFile,*qw;
char *buffer=(char*)malloc(sizeof(char)*size);
qw =fopen("qw","r");
pFile = fopen ( "qwe" , "wb" );
printf("%d==",pFile);
printf("%d",size);
fread(buffer,1,size,qw);
fwrite (buffer , sizeof(byte), size , pFile );
fclose (pFile);
rename("qwe","Groot.jpg");
return 0;
}
(9)c读取jpg文件二进制扩展阅读:
c语言读取TXT文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main()
{
char buf[MAX_LINE]; /*缓冲区*/
FILE *fp; /*文件指针*/
int len; /*行字符个数*/
if((fp = fopen("test.txt","r")) == NULL)
{
perror("fail to read");
exit (1) ;
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
len = strlen(buf);
buf[len-1] = ''; /*去掉换行符*/
printf("%s %d ",buf,len – 1);
}
return 0;
}
⑩ c语言如何读写二进制
内容的写入分两种,a.字符 b.字节前者可以写一些字符串,后者主要用来内写入 视频,音频那些数据容.就像你用记事本打开 *.mp3文件一样会出现乱码。而如果你想写入字符串也出现乱码,则应该修改写入时的字符编码格式。有Unicode,utf-8,ansi,gbk等等。而windows有自己默认的读取格式,所以当你写入的格式与默认格式不相同时就会出现用记事本打开时出现乱码了。另一种情况是在写入字符串之前对字符串进行加密。如果需要具体的例子,可以M我QQ