如何用C++在屏幕上显示png图片?

没有窗体,就像桌面图标一样的... 没有窗体,就像桌面图标一样的 展开
 我来答
娜样滴歌杰出肤
2016-05-18 · TA获得超过196个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:140万
展开全部
如何在Windows应用程序中显示jpeg和png格式的图片 源代码片段(zip压缩包,5k) 依赖的第三方库(zip压缩包,900k) 经常看到有人在bbs技术版面上问类似的问题,简要介绍一下怎么解决这个小问题。因为Win32 API只对bmp格式的位图提供基本支持,所以需要使用第三方库来完成这个任务。GDI+其实就是一个很好的选择,不仅支持多种图片格式,而且支持图像处理操作,并且做了一定的优化,接口定义也十分清晰。 这里讲的是基于Independent Jpeg Group的JpegLib和libpng.org的libpng两个库的解决方案。Jpeg和png两种格式都是带压缩的图像格式,,所不同的是jpeg使用了有损压缩,png使用了无损压缩。要在Windows程序中显示这两种图片需要将压缩过的图片在内存中还原为位图。相对而言bmp格式的图片处理起来就容易得多,以至于查查资料每个人都可以写一个读取bmp图片的模块,当然,也不完全那么容易,还要考虑多种颜色模式和bmp图片中4像素对齐的问题。OK,不管jpeg和png读取多么麻烦,ijg和libpng.org已经写好了读取这两种格式文件的库,这两个库都是用C语言写的,期中libpng依赖于zlib,而zlib也是用C写成。 最近做的项目需要使用jpeg和png图片,这里把一些代码片段(没有DEMO,单读取文件部分是完整的)分享一下,这些代码的原始版本并不是我们小组写的,但是我们进行了封装并且修复了一些bug(比如内存泄露)。本来是想做个小DEMO演示一下,但是工作量比较大(我试图同时支持vc6,vc71,vc80,dev-cpp等等)。 以下是载入jpeg图片的方法: C++代码 HBITMAP PictureLoader::LoadJpegPicture( const char* fileName ) { FILE * jpegFile; struct jpeg_error_mgr jerr; struct jpeg_decompress_struct cinfo; if ((jpegFile = fopen(fileName, "rb")) == NULL) { return HBITMAP(0); } cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, jpegFile); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); int rowSize = cinfo.output_width * cinfo.output_components; int width=cinfo.output_width; int height=cinfo.output_height; BYTE *bmpBuffer=new BYTE[(height+1)*width*3]; BYTE **pBuffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, rowSize, 1); while(cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, pBuffer, 1); int start=rowSize*(cinfo.output_scanline-1); for(int i = 0; i < rowSize; i++) { bmpBuffer[start+i]=pBuffer[0][i]; } } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); HBITMAP bitmap = CreateBitmapFromBuffer(bmpBuffer, width, height); fclose(jpegFile); delete[] bmpBuffer; return bitmap; }
机云游
2016-05-18 · 超过23用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:29.1万
展开全部
Gdiplus开发包
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式