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

Direct2D - WIC IWICBitmapClipper 본문

DEV/Direct2D

Direct2D - WIC IWICBitmapClipper

F.R.I.D.A.Y. 2021. 5. 1. 21:51
반응형

 대상 비트맵을 일정 영역 잘라내는 IWICBitmapClipper


IWICBitmapClipper

 가끔 이미지 작업을 하면 이미지의 일부를 잘라내야하는 작업이 필요합니다. 단적인 예로, 게임에서 움직이는 대상의 움직임을 하나의 이미지 파일로 생성하고, 움직이는 모션을 보일 때는 그 이미지를 필요한 모션을 찾아 잘라 사용하는 방식도 있습니다. 웹에서는 여러 아이콘 파일을 하나의 이미지로 생성하고 필요한 위치에 이미지를 잘라서 로드하는 방식을 이용합니다.

 

구현

 IWICBitmapClipper의 구현은 IWICImagingFactory 객체에서 구현할 수 있습니다.

IWICImagingFactory* pWicFactory;
IWICBitmapClipper* pClipper;
// IWICImagingFactory 객체는 이미 생성되어 있다고 가정한다.

pWicFactory->CreateBitmapClipper(&pClipper);

 

비트맵 변형

 IWICBitmapSource 인터페이스를 상속한 다른 인터페이스와 마찬가지로, 객체 안쪽의 Initialize 메서드를 이용하면 비트맵을 변형시킬 수 있습니다.

IWICImagingFactory* pFactory;
IWICBitmapFrameDecode* pFrame;
IWICBitmapClipper* pClipper;
// 관련 작업은 이미 처리되어 있다고 가정한다.

WICRect rc = {0, 0, 400, 300};

pClipper->Initialize(pFrame, &rc);

 주의할 점은, IWICBitmapClipper를 초기화하면서 잘라내는 영역은 일반 RECT나 D2D1_RECT_F 등의 객체가 아닌 WICRect를 자료형으로 가져야한다는 점입니다.

더보기

# WICRect

typedef /* [public] */ struct WICRect
    {
    INT X;
    INT Y;
    INT Width;
    INT Height;
    } 	WICRect;

 다른 사각형 자료형과 달리 기준점과 사각형의 크기로 값이 지정되어 있습니다. 

 

이미지 그리기

 이미지는 ID2D1HwndRenderTarget 객체로 그릴 수 있습니다.. ID2D1HwndRednerTarget 객체로 그릴 수 있는 대상은 ID2D1Bitmap을 자료형으로 가지고 있는 객체입니다.

ID2D1HwndRenderTarget* pRT;

pRT->DrawBitmap(pClipBitmap, D2D1::RectF(400, 300, 800, 600));

 변수 pClipBitmap는 기존 이미지에 변형을 가한 WIC 이미지를 D2D1 이미지로 변경한 데이터가 들어있습니다.

 

 

변형 결과

 이미지를 변형하면 아래와 같이 나옵니다. 보기의 이미지는 기본 이미지를 출력하고, 그 위에 잘라낸 이미지를 (400, 300) 위치에 크기(400, 300)만큼으로 그린 것입니다.[# 그보다 이미지가 작게 보인다면 윈도우 크기에 의해 잘려진 부분입니다.]

 잘라낸 부위가 (0, 0, 400, 300)[# WICRect 기준]이기 때문에 좌측 상단 이미지와 같게 나오는데, 만일 잘라낼 부분을 (800, 200, 400, 300)[# WICRect 기준]으로 맞춘다면 아래와 같이 나오게 됩니다.

좌측은 잘려진 이미지가 출력된 모습이며, 우측은 잘린 이미지를 출력하지 않고 원본만 출력한 모습입니다.

 

# index

728x90
반응형

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

Direct2D - SetTransform  (0) 2021.05.05
Direct2D - WIC IWICBitmapFlipRotator  (0) 2021.05.04
Direct2D - WIC IWICFormatConverter  (0) 2021.04.29
Direct2D - WIC IWICBitmapScaler  (0) 2021.04.29
Direct2D - WIC IBitmapSource  (0) 2021.04.28
Comments