F.R.I.D.A.Y.

Direct2D - WIC 비트맵 그리기 사전 작업 본문

DEV/Direct2D

Direct2D - WIC 비트맵 그리기 사전 작업

F.R.I.D.A.Y. 2021. 4. 24. 07:18
반응형

 Windows Imaging Component라고 해서 WIC라는 COM 요소가 있다. Windows Vista부터 나온 코덱 관리 프레임워크인데 이 녀석을 사용하면 여러가지 포맷을 하나의 메서드로 이용할 수가 있어서 개발할 때 편할 것 같다.


WIC

 WIC는 COM[# Component Object Model]으로서 사용하려면 WIC를 사용하고 있는 스레드에서 COM 객체의 요소에 접근할 수 있도록 설정해주어야 한다.

 

CoInitialize

 그래서 있는게 이 CoInitialize 함수이다. msdn에는 이 함수보다 CoInitializeEx 함수를 이용한 것을 권장하고 있다. 간단히 설명하면 이 함수를 통해서 COM 객체 안의 명령을 COM을 이용하고자 하는 위치에서 접근할 수 있도록 해주는 기능을 담당한다고.

 

함수 원형

 아래는 함수 원형이다.

HRESULT CoInitializeEx(
  LPVOID pvReserved,
  DWORD  dwCoInit
);

 

LPVOID pvReserved

 예약된 공간이다. 반드시 NULL을 넣어주라고 한다.

 

dwCoInit

 스레드 옵션에 따른 초기화이다. 단일 스레드를 사용한다면 COINIT_APARTMENTTHREADED를, 멀티 스레드를 이용한다면 COINIT_MULTITHREADED를 값으로 넣어준다. 그 외에 다음의 값이 있다.

  • COINIT_DISABLE_OLE1DDE[# OLE1 지원을 위해서 DDE라는 것을 비활성화하는 옵션]
  • COINIT_SPEED_OVER_MEMORY[# 성능 향상을 위해 메모리 사용량을 늘리는 옵션]

 이 두 항목은 위에서 소개한 옵션과 비트 OR 연산자로 묶어서 전달할 수 있다.

 

반환값
  • S_OK 정상적으로 초기화
  • S_FALSE 이미 초기화 된 상태
  • RPC_E_CHANGED_MODE 이전 모드[# 단일 스레드 모드 혹은 멀티 스레드 모드]에서 모드 전환이 일어남

 

 

CoUninitialize

 <CoInitialize> 함수를 이용해 COM 요소에 접근하도록 허용한 후에 프로그램을 종료하거나 사용이 끝났을 때는 CoUnitialize 함수를 호출해 이 접근을 해제해주어야 한다.

 

CoInitialize(nullptr, COINIT_APARTMENTTHREADED);

.
.
.

CoUninitialize();

시작과 끝에 항상 쌍으로 작성해주어야 한다. 시작 위치와 끝 위치가 다르다면 시작 위치에 <CoInitialize>를, 끝 위치에 <CoUninitialize> 함수를 위치시킨다.

 

# index

728x90
반응형

'DEV > Direct2D' 카테고리의 다른 글

Direct2D - WIC IBitmapSource  (0) 2021.04.28
Direct2D - WIC를 이용해 이미지 그리기  (1) 2021.04.24
DirectWrite - IDWriteFactory  (0) 2021.04.21
DirectWrite - DirectWrite 되짚기  (0) 2021.04.14
DirectWrite - 텍스트 출력하기 2  (0) 2021.04.13
Comments