请问gif2bmp怎么实现?
定义了
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
然后使用 Image image;
提示
cannot access protected member declared in class 'Gdiplus::Image'我做的不对?或者有别的好的转换办法吗?只要实现GIF2BMP
定义了
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
然后使用 Image image;
提示
cannot access protected member declared in class 'Gdiplus::Image'我做的不对?或者有别的好的转换办法吗?只要实现GIF2BMP
这样就加载了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);
如果是VS2003以上,直接用CImage这个类就更方便了。