GDI+ gif文件的显示和格式转换

                                                GDI+ gif文件的显示和格式转换

           怎么获取gif文件的每一帧,并且显示出来呢?

 

            1.怎么用gid+显示gif文件

                总体思路:用Image装载图像,用Graphic显示图像。

               相关函数:

               (1)Image::FromFile可以从文件中加载一个图像。         

                       可以加载的文件类型有: BMP, GIF, JPEG, PNG, TIFF, and EMF

                       Image* image = Image::FromFile(_T("res//test.gif"));

 

               (2)Image::GetFrameDimensionsCount 返回一个所谓的“维度”的个数,

                     每个维 度可能包含多个帧,gif文件就是包含1个维度,然后维度中可能包含

                     不定数目的帧。

                      UINT count  = image->GetFrameDimensionsCount();

 

               (3)Image::GetFrameDimensionsList 就是获得这些维度的GUID列表。

                       先分配count个GUID的数组。

                       GUID *pDimensionIDs=(GUID*)new GUID[count];
                       image->GetFrameDimensionsList(pDimensionIDs, count);

               (4)Image::GetFrameCount获得指定的“维数”有多少帧。

                     UINT   FrameNums=image->GetFrameCount(&pDimensionIDs[0]);

 

                 (5) 获得每帧之间的时间间隔。

                       PropertyTagFrameDelay是GDI+中预定义的一个GIG属性ID值,表示标

                       签帧数据的延迟时间。

                       

                       先调用 Image::GetPropertyItemSize获得有多少个时间间隔属性item.

                       然后调用Image::GetPropertyItem填充获得的items.

 

                       UINT   FrameDelayNums=image->GetPropertyItemSize  

                       (PropertyTagFrameDelay);


                       PropertyItem *  lpPropertyItem=new  PropertyItem

                       [FrameDelayNums];


                      image->GetPropertyItem

                      (PropertyTagFrameDelay,FrameDelayNums,lpPropertyItem);

 

                      时间间隔就保存在PropertyItem的value成员中。

 

                (6)最后,用一个while循环来循环显示每一帧。

                        Image::SetActiveFrame来设置显示那一帧。

 

                  总体的代码如下:

 

                     

                      

                       

                       

                 

 

 

         2.怎么将gif中的某一帧提取出来,保存为其他的文件格式。

            (1) Image::Save函数

                               Status Save(      

     const WCHAR *filename,      const CLSID *clsidEncoder,      const EncoderParameters *encoderParams );
                 其中第一个参数是表示要保存的文件名称,第二个参数是想采用的编码器,不同
                  的图片格式对应的编码器也不一样。第三个参数设为NULL即可。
             (2)要得到参数2,必须调用函数:
                     Image::GetImageEncodersSize来获得编码器列表
                     Image::GetImageEncoders来获得对应的编码器相关信息(包括CLSID)
              下面是相关的代码:
               
            
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值