HBITMAP LoadImageThumbnailWithImagingApi(const CString &strFileName, int imgWid, int imgHei) { IImagingFactory *pImgFactory = NULL; IImage *pImage = NULL; IImage *pImageThumb = NULL; CoInitializeEx(NULL, COINIT_MULTITHREADED); HBITMAP hResult = 0; if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void **)&pImgFactory))) { ImageInfo imageInfo; if (SUCCEEDED(pImgFactory->CreateImageFromFile(strFileName, &pImage)) && SUCCEEDED(pImage->GetThumbnail(imgWid, imgHei, &pImageThumb)) && SUCCEEDED(pImageThumb->GetImageInfo(&imageInfo))) { CWindowDC dc(0); CDC dcBitmap; dcBitmap.CreateCompatibleDC(&dc); hResult = CreateCompatibleBitmap(dc.GetSafeHdc(), imageInfo.Width, imageInfo.Height); if (hResult) { HGDIOBJ hOldBitmap = dcBitmap.SelectObject(hResult); pImage->Draw(dcBitmap.GetSafeHdc(), CRect(0, 0, imageInfo.Width, imageInfo.Height), NULL); dcBitmap.SelectObject(hOldBitmap); } pImageThumb->Release(); pImage->Release(); } pImgFactory->Release(); } CoUninitialize(); return hResult; }