메모내용

GDI Plus 라이브러리

GDI + 개요

GDI 덕분에 윈도우즈 운영체제에서 동작하는 프로그램은 그래픽 장치의 종류에 상관없이
원하는 그림을 그릴수 있습니다.
하지만 이런 GDI 개념은 급성장하는 그래픽 장치의 특성을 반영할 수 없는 구조라서
아무리 좋은 그래픽 장치를 사용하더라도 그 성능이 일정한 수준을 넘을 수 없습니다.

AntiAlias 나, PNG 등
자신의 그래픽 장치가 충분히 제공하는 기능이지만, GDI 는 이런 기능을 제공하지 않습니다.
하지만 GDI 를 수정하게 되면 기존에 만들어진 응용프로그램과의 호환성에 문제가 발생하게 됩니다.
그래서 GDI 를 수정하지 않고 향상된 그래픽 장치의 특성을 사용할 수 있게 하는
추가적인 라이브러리를 제공하는데, 그것이 GDI+ ( Gdiplus )
입니다.

그렇다고 해서 GDI+ 가 그래픽 장치에 직접 접근하여 작업하는 것은 아닙니다.
GDI 와 마찬가지로 GDI + 도 Win32API 를 통해서 작업을 하지만,
그래픽 장치가 제공하는 좀 더 향상된 그리기 기능을 수행 하는 것 입니다.

GDI + 는 Windows XP 시절부터 제공되던 기술이기 때문에 새로운 기술은 아닙니다.
그리고 Windows Vista 부터는 Direx2D 라는 기술이 나오면서
향상된 그래픽을 사용하는 작업에는 GDI + 가 아닌 Direct2D 기술로 대체되고 있습니다.

사용법

  • GDI Plus 사용방법 1
  • GDI Plus 사용방법 2
  • GDI Plus 헤더파일 오류
  • 컴파일 에러 대처방안

    Gdiplus 를 사용하기 위해서 Gdiplus.h 만 include 하면 무수한 헤더파일을 찾을수 없다는 컴파일 에러가 발생 한다.
    이는 윈도우의 기본설정으로. 거의사용되지 않는 내용을 Windows 헤더에서 제외하기 때문인데,
    windows.h 를 include 하는 framework.h 또는 stdafx.h 에는 이와 같이 windows.h 을 포함하고 있다
    // framework.h 내용 // ... // 거의 사용되지 않는 내용을 Windows 헤더에서 제외합니다. #define WIN32_LEAN_AND_MEAN #include <windows.h> //...
    WIN32_LEAN_AND_MEAN 을 정의하고 windows.h 를 포함시키면 수많은 헤더파일을 제외하는데,
    #include < cderr.h >
    #include < dde.h >
    #include < ddeml.h >
    #include < dlgs.h >
    #include < lzexpand.h >
    #include < mmsystem.h >
    #include < nb30.h >
    #include < rpc.h >
    #include < shellapi.h >
    #include < winperf.h >
    #include < winsock.h >
    #include < wincrypt.h >
    #include < winefs.h >
    #include < winscard.h >
    #include < winspool.h >
    #include < ole2.h >
    #include < commdlg.h >

    이때 gdiplus 에 필요한 헤더파일또한 제외되어 문제가 발생합니다.
    이중 ole2.h 하나만 있으면 컴파일 에러 문제를 해결할 수 있습니다.
    1. 그래서 보통 WIN32_LEAN_AND_MEAN 정의부분을 주석처리 하거나
    2. ole2 헤더파일만 inlcude 하거나
    3. MFC 에서 환경에서 작업을 합니다.