今天给各位分享c语言打开jpg图片的知识,其中也会对c语言读取jpg图片像素进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、用c语言如何读取和保存jpg图片文件?2、C语言如何读取jpg格式的图片3、怎样用C语言显示一张jpg的图片呢4、用C语言实现,简单的告诉我,怎么读取当前目录下的一个jpg图像,并且显示出来5、c语言中用fopen打开一张JPG格式的图片,名为p.jpg,把该图片复制为new_photo.jpg?求大神写出完整代码6、c语言怎样打开JPG文件??
用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\n”,size);
FILE * pFile,*qw;
char *buffer=(char*)malloc(sizeof(char)*size);
qw =fopen(“qw”,”r”);
pFile = fopen ( “qwe” , “wb” );
printf(“%d==\n”,pFile);
printf(“%d\n”,size);
fread(buffer,1,size,qw);
fwrite (buffer , sizeof(byte), size , pFile );
fclose (pFile);
rename(“qwe”,”Groot.jpg”);
return 0;
}
扩展资料:
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] = ‘\0’; /*去掉换行符*/
printf(“%s %d \n”,buf,len – 1);
}
return 0;
}
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;
else
nf.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语言显示一张jpg的图片呢
可以用函数OleLoadPicture从包含有图像数据的流中装载图像。
具体实现代码如下:
//在显示图像之前,首先要获取到图像文件的存放路径,这里采用标准的文件打开对话框来选取图像文件,文件名存放在CString型的变量m_sPath中:
CFileDialog dlg(TRUE,”jpg”,”*.jpg”,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
“JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||”,NULL);
if(dlg.DoModal()==IDOK)
{
m_sPath=dlg.GetPathName();
Invalidate();
}
//为简单计,图形显示的代码直接在视类中的OnDraw中编写,首先打开文件并判断文件的可用性,并把文件内容放到流接口IStream的对象pStm中:
IStream *pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
……
if (file.Open(m_Path,CFile::modeRead)file.GetStatus(m_Path,fstatus) ((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
file.ReadHuge(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, pStm);
}
}
}
//然后,就直接调用OleLoadPicture函数从流中装载图像:
IPicture *pPic;
……
OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)pPic));
//由于该函数有时会导致失败,所以应当用SUCCEEDED宏来做一些适当的保护工作,只有在数据装载成功的前提下才能继续下面的图像显示工作:
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPic->get_Width(hmWidth);
pPic->get_Height(hmHeight);
double fX,fY;
……
fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
AfxMessageBox(“渲染图像失败!”);
pPic->Release();
}
else
AfxMessageBox(“从流中装载图像失败!”);
//其中,显示工作主要是由IPicture接口对象的Render函数来完成的,该函数主要用来将图片的指定部分画到指定的设备环境的指定位置。
原型如下:
HRESULT Render( HDC hdc, //渲染图像用的设备环境句柄
long x, //在hdc上的水平坐标
long y, //在hdc上的垂直坐标
long cx, //图像宽度
long cy, //图像高度
OLE_XPOS_HIMETRIC xSrc, //在源图像上的水平偏移
OLE_YPOS_HIMETRIC ySrc, //在源图像上的垂直偏移
OLE_XSIZE_HIMETRIC cxSrc,//在源图像上水平拷贝的数量
OLE_YSIZE_HIMETRIC cySrc,//在源图像上垂直拷贝的数量
LPCRECT prcWBounds //指向目标图元设备环境句柄的指针);
用C语言实现,简单的告诉我,怎么读取当前目录下的一个jpg图像,并且显示出来
FILE *fp;
if((fp = fopen(“sb.jpg”,”r”) == NULL)) {
printf(“\nerror”);
exit(0);
}
以上仅仅能打开jpg文件,想要显示需要窗口编程。win32或者MFC来实现。
c语言中用fopen打开一张JPG格式的图片,名为p.jpg,把该图片复制为new_photo.jpg?求大神写出完整代码
你好!
给你写了一段代码,实际验证照片复制成功了,你试试吧
#includestdio.h
int main()
{
char pBuffer[8];
FILE *f1, *f2;
f1 = fopen(“1.jpg”, “rb”); // 以二进制形式读
f2 = fopen(“new_photo.jpg”, “wb”); // 以二进制形式写
while (!feof(f1))
{
fread(pBuffer, 1, 8, f1); // 每次读8个字节
fwrite(pBuffer, 1, 8, f2); // 每次写8个字节
}
fclose(f1);
fclose(f2);
}
c语言怎样打开JPG文件??
一般来讲是生成
ppm
or
pnm
处理图片数据的,
但是如果你非要读取
JPG
格式的数据,
我想下面的
Library
可以帮助到你.
c语言打开jpg图片的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言读取jpg图片像素、c语言打开jpg图片的信息别忘了在本站进行查找喔。