c语言jpeg图片显示

C语言怎样显示一张图片

1、如果有图片(例如 wzzx.jpg) 程序中插一句:

system(“mspaint wzzx.jpg”); 就可以 在运行时显示这张图片。

用字符串变量调用也可以:

char pic_name[80]=”wzzx.jpg”;

char cmd[100];

sprintf(cmd,”mspaint %s”,pic_name);

system(cmd); // 显示图片

2、system函数:

原型:int system(const char * command);

功能:执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名;

说明:在windows系统中,system函数直接在控制台调用一个command命令。在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后随即返回原调用的进程;

头文件:stdlib.h;

返回值:命令执行成功返回0,执行失败返回-1。

用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语言jpeg图片显示

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语言实现JPEG图像格式的读取与写入??

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 ;

    }

为什么C语言不能直接读取jpeg图像文件

可以直接读取的

按照二进制文件 也就是”rb”方式打开就可以了

不过 读取后,这个是乱的,没法直接显示。

需要自己写解码程序,或者调用对应jpeg库

转成bitmap才可以显示的。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月24日 22:09:23
下一篇 2024年3月24日 22:16:59

相关推荐

  • c语言typedef与defind,c语言typedef与define

    C语言中的#define与typedef有和区别;static与extern定义有和区别? 1、计算机C语言中的“C”代表着Combined,结合、组合、合并的意思。C语言是一门通用计算机编程语言,其发展经历了许多的科学家们的加工处理。 2、c语言中的“!”是逻辑运算中的非运算。“!”是C语言中的非运算符,在变量前面使用它,会构建非运算表达式,表达式的返回结…

    2024年5月18日
    6400
  • c语言高级实例解析pdf,c语言高级用法

    《嗨翻C语言》pdf下载在线阅读全文,求百度网盘云资源 《嗨翻C语言》百度网盘txt 最新全集下载:链接:提取码:HQBH 《嗨翻C语言》运用认知科学和学习理论的最新成果,精心为你打造了一次多感官的 学习体验,绝对能够嗨翻你的大脑,激发你的学习热情。 读这么多c语言入门书没什么用得。这些书可不是”补集“,继续读很浪费时间并且没好处,既然某入门书看了5遍,那你…

    2024年5月18日
    4900
  • c语言坐标图,c语言表示坐标

    求教高手:怎么用C语言画坐标图? 如果你说的是绘图的话就不行,不能在拿个黑框(cmd窗口)中绘图,除非你想用“.\/|”等字符来替代图画。如果想绘图,应该使用win32 窗口项目,那样才能绘图。 用(x,300-y)来表示,则就是表示横坐标在距离显示器顶端300个像素的地方。c语言中一般是在显示器的中央附近吧,因为c语言中显示VGA好像是640*480。当然…

    2024年5月18日
    4100
  • 看c语言怎么有趣,c语言有趣吗

    发现了一个有趣的c语言问题,请各位大神帮忙解释一下。 之所以再次编译值不改变,乃是因为系统在加载可执行镜像时所选取的栈的初始地址是相对固定的,a就在这个栈上,而且程序开始到main函数执行,这是一段按部就班的例程,没有什么变数,所以a的地址不变是可以理解的。 第二个++i,i = 2的值参与到式中的运算;第三个i++,i = 2的值参与到式中的运算。 其实是…

    2024年5月18日
    2900
  • xcode编译c语言静态库,c语言编译成静态库

    如何在Xcode编译静态库时自动导出.h头文件 打开一个新的场景或某元件。在第一帧上按F6,使帧上有一个小黑点;把库里面你想要的图片名点上,这时,在库的窗口里可看到你要的图片,再把图片拽出编辑区;最后导出图像或复制粘帖。 创建静态库工程,工程命名为BaseSDK,生成的.a文件名变成libBaseSDK。 方法/步骤 右键点击项目,选择右键菜单的Add fi…

    2024年5月18日
    3600
  • 24游戏c语言设计书,24点游戏c语言编程报告

    350分求一个用C语言编写的速算24的课程设计 总体要求对实际问题进行分析、写出算法分析。设计程序结构给出设计的各模块。提交各应用程序的源程序清单。 首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。在test.cpp文件中,输入C语言代码:int n = 5;printf(%lf, pow(10, n)); 。 if ( m != …

    2024年5月18日
    4100
  • c语言计算50的阶乘,c语言程序设计求阶乘

    数学题:50!(50的阶乘)等于多少?用正确的方法表示 是阶乘符号。n!=n×(n-1)!!是双阶乘符号。 个0,因数中有1230、340、450这几个数,以5结尾的因数乘以偶数得到一个0,以0结尾的因数相乘再加一个0,所以一共有10个0。回答完毕。 亦即n!=1×2×3×…×n。计算n!时,当n不太大时,普通的科学计算机都可以计算。当n很大时,…

    2024年5月18日
    4300
  • c语言signed和unsigned,c语言中signed char

    unsigned在c语言中是什么意思? 无符号数的意思,对于int型来说,如果有符号数的范围是-3~4,则无符号数(全为正数)则是0~7了。不过他们都表示2^3=8个数。 c语言unsigned,则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负。C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。 uns…

    2024年5月18日
    4200
  • 女黑客学习图片,著名女黑客

    新手如何学习编程? 学会记笔记 很多人刚开始学编程以往里面的很多东西都要记住,其实这是错误的做法。不用去记住这些代码,理解代码比记住代码更重要。这里我们能理解代码是干什么用的就可以了。 这么学习编程:学习编程可以从这几个方面入手:选择适合的编程语言环境;选择适合自己的学习方式;保持热情不要轻易放弃;在学习的道路上多和程序员交流,寻找良师益友。 选择一门编程语…

    2024年5月18日
    3200
  • c语言数据类型只用char,c语言char型数据采用

    C语言中char的用法 C语言中char用于定义字符类型变量或字符指针变量,例如“char a;”则定义了变量a是字符类型,“char *a;”则定义了变量a是字符指针类型。 char是C语言关键字之一,用来表示基础类型字符型。每个char变量占一个字节,表示范围为-128到127。char用来存储字符时,实际存储值为对应的ASCII码值。char类型可以用…

    2024年5月18日
    3600

发表回复

登录后才能评论



关注微信