请问gif2bmp怎么实现?
定义了
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
然后使用 Image image;
提示
cannot access protected member declared in class 'Gdiplus::Image'我做的不对?或者有别的好的转换办法吗?只要实现GIF2BMP

解决方案 »

  1.   

    Image image(L"D:\\a.gif"); //unicode路径
    这样就加载了gif图片了,保存的话是
    image.Save(L"D:\\a.bmp", pEncoder);
    CLSID* pEncoder是BMP的GUID,获得这个值比较麻烦,送你一个函数,这个是在CImage里面弄出稍作修改的结果:
    CLSID FindCodecForExtension( LPCTSTR pszExtension)
    {
    UINT nEncoders;
    UINT nBytes;
    Gdiplus::Status status;
    status = Gdiplus::GetImageEncodersSize( &nEncoders, &nBytes );
    if( status != Gdiplus::Ok )
    return CLSID_NULL;
    USES_CONVERSION_EX;
    Gdiplus::ImageCodecInfo* pEncoders = static_cast< Gdiplus::ImageCodecInfo* >( _ATL_SAFE_ALLOCA(nBytes, _ATL_SAFE_ALLOCA_DEF_THRESHOLD) );
    if( pEncoders == NULL )
    return CLSID_NULL;
    status = Gdiplus::GetImageEncoders( nEncoders, nBytes, pEncoders );
    if( status != Gdiplus::Ok )
    return CLSID_NULL; CT2CW pszExtensionW( pszExtension );
    for( UINT iCodec = 0; iCodec < nEncoders; iCodec++ )
    {
    CStringW strExtensions( pEncoders[iCodec].FilenameExtension ); int iStart = 0;
    do
    {
    CStringW strExtension = ::PathFindExtensionW( strExtensions.Tokenize( L";", iStart ) );
    if( iStart != -1 )
    {
    if( strExtension.CompareNoCase( pszExtensionW ) == 0 )
    {
    return pEncoders[iCodec].Clsid;
    }
    }
    } while( iStart != -1 );
    }
    return CLSID_NULL;
    }利用这个函数,可以这样保存:
    CLSID clsidEncoder = FindCodecForExtension(psExt);
    image.Save(L"D:\\a.bmp", &clsidEncoder);
      

  2.   

    如果是保存成BMP位图,那么psExt = ".BMP"而不是"BMP"。
    如果是VS2003以上,直接用CImage这个类就更方便了。
      

  3.   

    VC6要怎么使用CImage?谢谢楼上的2位。晚上下班给分
      

  4.   

    CImage是Windows PlatForm SDK里面带的一个类,如果有地方下载这个SDK安装一下,也是可以用的,不过估计比较难找。就用Image结合我给的那个函数,应该也可以达到目的了吧。
      

  5.   

    我的毕业论文就是图片格式处理系统,有什么问题可以发到这个邮箱,[email protected],我可以给你一些源码,以及封装好的类,
      

  6.   

    这个问题需要用到GDI+,用它处理比较简单,你可以从网上搜一些资料,等我下班了可以把一些DLL,和类库文件传给你,再给你讲一下如何配置,其他的你可以直接用我的