资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
BCB使用GDI+实现分解gif每帧保存为bmp上一篇 / 下一篇 2009-09-27 19:51:18 / 个人分类:随笔 查看( 431 ) / 评论( 0 ) / 评分( 0 / 0 ) 由于工作需要用到GDI+.就当是做个备份.然而 GDI+ 和 BCB的编译环境兼容性不太好,冲突一大堆.其实这个demo代码不难.不过第一次用GDI+.实在有很多问题.无奈之下找来了GDI+的SDK.果然牛叉的文档.崇拜ing.GDI+实现分解gif每帧保存为bmp图.别忘了加上头文件.还是怀念VC年代,在下面的代码基础上,可以得到延迟时间,播放总长,可以根据自己的需要自行更改bool GetEncoderClsid(const WideString format, CLSID* Clsid) UINT num = 0; UINT size = 0; ImageCodecInfo* imageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if (size = 0) return false; imageCodecInfo = (ImageCodecInfo*)new charsize; if (!imageCodecInfo) return false; GetImageEncoders(num, size, imageCodecInfo); UINT i = 0; for (; i num & wcscmp(imageCodecInfoi.MimeType, format.c_bstr() != 0; i +); if (i num) *Clsid = imageCodecInfoi.Clsid; delete (char*)imageCodecInfo; return i GetFrameDimensionsList(&guid, 1); int count = image-GetFrameCount(&guid); CLSID Clsid; GetEncoderClsid(Limage/bmp, &Clsid); WideString fileName; for (int i = 0; i SelectActiveFrame(&guid, i); fileName = C: + IntToStr(i) + .bmp; image-Save(fileName.c_bstr(), &Clsid); delete image; GdiplusShutdown(gdiplusToken);/关闭GDI+以上代码在BCB6下通过调试.继续啃GDI+的SDK.GDI+实现图片格式转换(bmp、jpeg、gif、tiff、png) 分类: WINDOWS/R3/R0 2010-03-17 16:57 1670人阅读 评论(4) 收藏 举报 引言:通过GDI+我们可以很方便的对bmp、jpeg、gif、tiff、png格式的图片进行转换。步骤:1) 通过GdiplusStartup初始化GDI+,以便后续的GDI+函数可以成功调用。2) 通过GetImageEncodersSize获取GDI+支持的图像格式编码器种类数numEncoders以及ImageCodecInfo数组的存放大小size。3) 通过malloc为ImageCodecInfo数组分配足额空间。4) 通过GetImageDecoders获取所有的图像编码器信息。5) 查看ImageCodecInfo.MimeType,查找符合的图像编码器的Clsid。6) 释放步骤3)分配的内存。7) 创建Image对象并加载图片。8) 调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它。9) 释放Image对象。10) 通过GdiplusShutdown清理所有GDI+资源。示例:1. #include 2. #include 3. #include 4. usingnamespaceGdiplus;5. 6. #pragmacomment(lib,gdiplus) 7. 8. intGetEncoderClsid(constWCHAR*format,CLSID*pClsid)9. 10. UINTnum=0;/numberofimageencoders 11. UINTsize=0;/sizeoftheimageencoderarrayinbytes 12. 13. ImageCodecInfo*pImageCodecInfo=NULL;14. 15. /2.获取GDI+支持的图像格式编码器种类数以及ImageCodecInfo数组的存放大小 16. GetImageEncodersSize(&num,&size);17. if(size=0)18. return-1;/Failure 19. 20. /3.为ImageCodecInfo数组分配足额空间 21. pImageCodecInfo=(ImageCodecInfo*)(malloc(size);22. if(pImageCodecInfo=NULL)23. return-1;/Failure 24. 25. /4.获取所有的图像编码器信息 26. GetImageEncoders(num,size,pImageCodecInfo);27. 28. /5.查找符合的图像编码器的Clsid 29. for(UINTj=0;jSave(L11.png,&encoderClsid,NULL);63. 64. if(stat=Ok)65. printf(Bird.pngwassavedsuccessfully/n);66. else67. printf(Failure:stat=%d/n,stat);68. 69. /9.释放Image对象 70. deleteimage;71. /10.清理所有GDI+资源 72. GdiplusShutdown(gdiplusToken);73. return0;74.
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号