static BOOL drawImage(HDC hDC, LPCTSTR lpszFileName) { IImagingFactory* pImageFactory = NULL; BOOL bRet = FALSE; if (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory, 0, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void**)&pImageFactory))) { IImage* pImage = NULL; ImageInfo imageInfo; if (SUCCEEDED(pImageFactory->CreateImageFromFile(lpszFileName, &pImage)) && SUCCEEDED(pImage->GetImageInfo(&imageInfo))) { RECT rect = {0, 0, imageInfo.Width, imageInfo.Height}; pImage->Draw(hDC, &rect, 0); pImage->Release(); bRet = TRUE; } pImageFactory->Release(); } return bRet; }
HBITMAP SHLoadImageFile( LPCTSTR pszFileName ) { if ( !pszFileName || !*pszFileName ) return 0; String strFileName = convertToStringA(pszFileName); /*if ( String_endsWith(strFileName, ".bmp") ) { return (HBITMAP)::LoadImage(NULL, pszFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); }*/ if ( !String_endsWith(strFileName, ".png") && !String_endsWith(strFileName, ".bmp") ) return 0; IImagingFactory *pImgFactory = NULL; IImage *pImage = 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(CA2W(strFileName.c_str()), &pImage)) && SUCCEEDED(pImage->GetImageInfo(&imageInfo))) { CWindowDC dc(getMainWnd()); CDC dcBitmap; dcBitmap.CreateCompatibleDC(dc.m_hDC); hResult = CreateCompatibleBitmap(dc.m_hDC, imageInfo.Width, imageInfo.Height); if (hResult) { HBITMAP hOldBitmap = dcBitmap.SelectBitmap(hResult); //dcBitmap.FillSolidRect( 0,0, imageInfo.Width, imageInfo.Height, RGB(255,255,255)); CRect rc(0, 0, imageInfo.Width, imageInfo.Height); COLORREF clrOld = ::SetBkColor(dcBitmap.m_hDC, RGB(255,255,255)); ::ExtTextOut(dcBitmap.m_hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL); ::SetBkColor(dcBitmap.m_hDC, clrOld); pImage->Draw(dcBitmap.m_hDC, rc, NULL); dcBitmap.SelectBitmap(hOldBitmap); } pImage->Release(); } pImgFactory->Release(); } //CoUninitialize(); return hResult; }
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; }
void WorkWithImage(IImage & image) { auto size = image.GetSize(); cout << "Image size:" << size.width << "x" << size.height << endl; image.Draw(); }