Esempio n. 1
0
CLSID BitmapUtil::FindCodecForExtension( LPCTSTR pszExtension, const Gdiplus::ImageCodecInfo* pCodecs, UINT nCodecs )
{
	CT2CW pszExtensionW( pszExtension );

	for( UINT iCodec = 0; iCodec < nCodecs; iCodec++ )
	{
		CStringW strExtensions( pCodecs[iCodec].FilenameExtension );

		int iStart = 0;
		do
		{
			CStringW strExtension = ::PathFindExtensionW( strExtensions.Tokenize( L";", iStart ) );
			if( iStart != -1 )
			{
				if( strExtension.CompareNoCase( pszExtensionW ) == 0 )
				{
					return( pCodecs[iCodec].Clsid );
				}
			}
		} while( iStart != -1 );
	}

	return( CLSID_NULL );
}
Esempio n. 2
0
// Check if file name has a supported image type extension.
bool CMyStatic::IsSupportedFileExtension(LPCTSTR lpszFileName) const
{
	bool bIsSupportedFileExtension = false;
	LPCTSTR lpszExt = ::PathFindExtension(lpszFileName);
	if (_T('.') == *lpszExt)
	{
#if 1
		++lpszExt;
		static LPCTSTR lpszExtensions[] = { 
			_T("bmp"), _T("dib"), _T("rle"), 
			_T("jpg"), _T("jpeg"), _T("jpe"), _T("jfif"), 
			_T("gif"), 
			_T("tif"), _T("tiff"), 
			_T("png"), 
			_T("ico") 
		};
		int i = 0;
		while (!bIsSupportedFileExtension && lpszExtensions[i])
		{
			if (0 == _tcsicmp(lpszExt, lpszExtensions[i]))
				bIsSupportedFileExtension = true;
			++i;
		}
#else
		// Check file name extension against those of supported GDI+ codecs.
		// Based on code form atlimage.h.
		// Note that this check does not include .ico files which are supported for loading.
		ULONG_PTR gdiplusToken;
		Gdiplus::GdiplusStartupInput input;
		if (Gdiplus::Ok == Gdiplus::GdiplusStartup(&gdiplusToken, &input, NULL))
		{
			UINT nEncoders;
			UINT nBytes;
			if (Gdiplus::Ok == Gdiplus::GetImageEncodersSize(&nEncoders, &nBytes))
			{
				LPBYTE pBuf = new BYTE[nBytes];
				Gdiplus::ImageCodecInfo* pEncoders = reinterpret_cast<Gdiplus::ImageCodecInfo*>(pBuf);
				if (Gdiplus::Ok == Gdiplus::GetImageEncoders(nEncoders, nBytes, pEncoders))
				{
					CStringW strExtW(lpszExt);
					for (UINT iCodec = 0; iCodec < nEncoders && !bIsSupportedFileExtension; iCodec++)
					{
						CStringW strExtensions(pEncoders[iCodec].FilenameExtension);
						int iStart = 0;
						do
						{
							CStringW strExtension = ::PathFindExtensionW(strExtensions.Tokenize(L";", iStart));
							if (iStart != -1 &&
								0 == strExtension.CompareNoCase(strExtW.GetString()))
							{
								bIsSupportedFileExtension = true;
							}
						} while (iStart != -1 && !bIsSupportedFileExtension);
					}
				}
				delete [] pBuf;
			}
			Gdiplus::GdiplusShutdown(gdiplusToken);
		}
#endif
	}
	return bIsSupportedFileExtension;
}