GDI+ 사용하는 방법
먼저 ->나 .를 눌렀을 때 하부 메소드, 프로퍼티가 나오지 않은 것은
GDI+가 네임스페이스로 정의되어 있기 때문입니다.
그럼, GDI+의 기본적인 사용법을 차례로 알려드리겠습니다.
1. 필요 헤더파일
#include <gdiplus.h>
2. 필요 라이브러리 파일
#pragma comment( lib, "gdiplus.lib" )
3. 네임스페이스 지정
using namespace Gdiplus;
4. 프로그램 시작과 종료시 넣어줘야 하는 코드.
GDI+는 사용하기 전에 Startup을 해줘야 하고, 종료전에 Shutdown을 해줘야 합니다.
예를 들면 다음과 같은 방식이겠죠.
// GDI+ 스타트업
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
GdiplusStartupInput gsi;
ULONG_PTR uToken;
GdiplusStartup( &uToken, &gsi, NULL );
.
.
.
.
.
.
.
GdiplusShutdown( uToken );
return static_cast< int >( msg.wParam );
}
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
GdiplusStartupInput gsi;
ULONG_PTR uToken;
GdiplusStartup( &uToken, &gsi, NULL );
.
.
.
.
.
.
.
GdiplusShutdown( uToken );
return static_cast< int >( msg.wParam );
}
5. 간단한 사용방법
그리고 그래픽스개체( Graphics )는 다음과 같이 사용합니다.
이미지 로드를 어떻게 하는지 그걸로 해보죠.
HDC hdc = ::GetDC( hWnd );
// 생성자에 디바이스 컨텍스트를 입력합니다.
// 지금부터 그래픽스 개체를 사용할 수 있게 됩니다.
Graphics* pG = new Graphics( hdc );
// 이미지 개체를 생성합니다. 생성자에 이미지의 경로를 입력합니다.
Image* pIMG = new Image( L"C:\\imgx.jpg" );
// 0, 0에 이미지를 그립니다. 0, 0에서 시작하여 이미지 크기대로 그려집니다.
// 오버로딩되어있어 여러옵션으로 그릴 수 있습니다.
pG->DrawImage( pIMG, 0, 0 );
// 소멸시킵니다.
delete pIMG;
delete pG;
// 디바이스 컨텍스트 핸들을 돌려줍니다.
::ReleaseDC( hdc );
// 생성자에 디바이스 컨텍스트를 입력합니다.
// 지금부터 그래픽스 개체를 사용할 수 있게 됩니다.
Graphics* pG = new Graphics( hdc );
// 이미지 개체를 생성합니다. 생성자에 이미지의 경로를 입력합니다.
Image* pIMG = new Image( L"C:\\imgx.jpg" );
// 0, 0에 이미지를 그립니다. 0, 0에서 시작하여 이미지 크기대로 그려집니다.
// 오버로딩되어있어 여러옵션으로 그릴 수 있습니다.
pG->DrawImage( pIMG, 0, 0 );
// 소멸시킵니다.
delete pIMG;
delete pG;
// 디바이스 컨텍스트 핸들을 돌려줍니다.
::ReleaseDC( hdc );
GDI보다 100배는 쉬워졌죠?
그리고 BMP뿐아니라 JPG, GIF등등의 파일도 그릴 수 있습니다.
추가로 GDI + SDK를 받는 사이트도 적었습니다.(추가 2007년 10월 2일)
GDI Plus DLL 파일 받으러 가기
GDI Plus 라이브러리 받으러 가기
예전에 데브피아에서 보았던 글인데, 당시엔 블로그라는게 없어서
TEXT파일로만 저장해두었던 내용입니다.
당시 GDI PLUS를 사용하려고 많은 예제를 봤지만 제대로 원리를 몰랐었는데
이 글을 보고 GDI PLUS 사용법을 한눈에 알아버렸습니다.
이 글을 작성해주신 분께 감사의 말씀을 드리고, 원문글을 찾지 못해
링크를 걸지 못하였습니다.
제가 인터넷을 통해 배운만큼 배운 정보는 모든 사람에게 공유하겠습니다.