CodeSarang.Com
Home | 전체 메뉴 | 질문/답변 Join | Login | 검색   

 

OleLoadPicture 를 이용한 JPG GIF BMP 로딩하여 HBITMAP 리턴하기

등록자 : cpueblo (유광희), 2009-03-13

OleLoadPicture 를 이용한 JPG GIF BMP 로딩하여 HBITMAP 리턴하기

HBITMAP LoadImageFromFile(LPCTSTR szFileName) { HANDLE hFile = INVALID_HANDLE_VALUE; LPVOID pvData = NULL; HGLOBAL hGlobal = NULL; LPPICTURE pPicture; try { HRESULT hr; DWORD dwFileSize; // 파일 열기 hFile = CreateFile(szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); // 파일이 없을 경우 if(hFile == INVALID_HANDLE_VALUE) { TRACE("GetBitmapFromFile() File Open Error"); throw -1; } // 파일 크기 얻기 dwFileSize = GetFileSize(hFile, NULL); if(dwFileSize == -1) { TRACE("GetBitmapFromFile() File Read Error"); throw -1; } // 파일 크기만큼 동적할당 hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); if(hGlobal == NULL) { TRACE("GetBitmapFromFile() GlobalAlloc Error"); throw -1; } pvData = GlobalLock(hGlobal); if(pvData == NULL) { TRACE("GetBitmapFromFile() GlobalLock Error"); throw -1; } DWORD dwBytesRead = 0; BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL); if(!bRead) { TRACE("GetBitmapFromFile() ReadFile Error"); throw -1; } GlobalUnlock(hGlobal); CloseHandle(hFile); LPSTREAM pstm = NULL; hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm); if(S_OK != hr || pstm == NULL) throw -1; // Stream 에서 IPicture 를 생성 hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&pPicture); if(S_OK != hr || pPicture == NULL) { TRACE("Graphic File Load Error"); return false; } pstm->Release(); GlobalFree(hGlobal); HBITMAP PicHandle; pPicture->get_Handle((unsigned int *)&PicHandle); HBITMAP NewHandle = (HBITMAP)CopyImage(PicHandle, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); pPicture->Release(); return NewHandle; } catch (int e) { UNREFERENCED_PARAMETER (e); if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); if (hGlobal) { GlobalUnlock(hGlobal); GlobalFree(hGlobal); } if (pPicture) pPicture->Release(); } }

ex. CStatic 에 할당하기

HBITMAP hBitmap; hBitmap = LoadImageFromFile(szFilePath); if (hBitmap) m_Banner.SetBitmap(hBitmap);

댓글 달기 (로그인이 필요합니다)
제목
내용

http://codesarang.com. mail to cpueblocpueblo.com