C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1074] GDI+ 이미지를 리소스에서 불러오기
nansama [nansama] 11500 읽음    2012-02-16 16:26
GDI+ 에는 이미지의 회전과 같은 향상된 함수들이 제공 되지만
사용되는 이미지 데이타가 Gdiplus::Image를 사용 하여야 하므로 보통은 그림파일에서 불러오는
구조를 많이 사용 하게 되는데요, 다음 소스처럼 하면 RCDATA 타입 리소스를 Gdiplus::Image 형태로
불러오기가 가능합니다. 저는 PNG로 테스트 했어요,

Gdiplus::Image * GetImageResource( TCHAR* ResName )
{
	Gdiplus::Image * image = NULL;

    HRSRC hResource = ::FindResource(HInstance, ResName, RT_RCDATA);
    if (!hResource) return NULL;

    DWORD imageSize = ::SizeofResource(HInstance, hResource);
    if (!imageSize) return NULL;

    const void* pResourceData = ::LockResource(::LoadResource(HInstance, hResource));
    if (!pResourceData) return NULL;

    HGLOBAL hBuffer  = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
    if (hBuffer)
    {
    	void* pBuffer = ::GlobalLock(hBuffer);
        if (pBuffer)
        {
            CopyMemory(pBuffer, pResourceData, imageSize);

            IStream* pStream = NULL;
            if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK)
            {
                image = Gdiplus::Bitmap::FromStream(pStream);
                pStream->Release();

                if (image)
                {
	                if (image->GetLastStatus() != Gdiplus::Ok)
                	{
                        delete image;
                        image = NULL;
                    }
                }
            }
        }
        ::GlobalUnlock(hBuffer);
        ::GlobalFree(hBuffer);
    }
    return image;
}


사용 할때는

Gdiplus::Image * imgBG = GetImageResource(L"BACKGROUND");
HDC hdc = m_Target->Canvas->Handle;
Gdiplus::Graphics graphics(hdc);
float RollAngle = 45.0f;
graphics.RotateTransform(RollAngle);
graphics.DrawImage(imgBG , x, y, imgBG->GetWidth(), imgBG->GetHeight());

+ -

관련 글 리스트
1074 GDI+ 이미지를 리소스에서 불러오기 nansama 11500 2012/02/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.