본문 바로가기
::public/윈도우즈 응용 프로그래밍

Direct2D - 비트맵(Bitmap)

by 해맑은욱 2019. 9. 27.

*비트맵 객체 만들기

;ID2D1Bitmap로 표현. 장치 의존적 자원. 렌더타겟과 수명을 함께 함.

 

*비트맵 로드

;D2D에서는 WIC(Windows Imaging Component)를 사용하여 비트맵을 로드함.

 

*비트맵 그리기

;ID2D1RenderTarget의 DrawBitmap 함수를 호출.

void ID2D1RenderTarget::DrawBitmap(
    ID2D1Bitmap*                      bitmap,
    CONST D2D1_RECT_F*                destinationRectangle = NULL,
    FLOAT                             opacity = 1.0f,
    D2D1_BITMAP_INTERPOLATION_MODE    interpolationMode = D2D1_BITMAP_INTERPOLATION_MODE_LINEAR,
    CONST D2D1_RECT_F*                sourceRectangle = NULL 
)
cs

-파일로부터 비트맵 로드

// IWICImagingFactory 객체 생성.
IWICImagingFactory* pWICIFactory = NULL;
CoCreateInstance(CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pWICIFactory));
 
// IWICBitmapDecoder 생성.
IWICBitmapDecoder* pDecoder = NULL;
pWICIFactory->CreateDecoderFromFilename(
    L"pattern.png"NULL, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &pDecoder);
 
// 이미지 프레임의 0번째 이미지.
IWICBitmapFrameDecode* pSource = NULL;     
pDecoder->GetFrame(0&pSource);
 
// D2D 호환 포맷으로 변환.
IWICFormatConverter* pConverter = NULL;
pWICIFactory->CreateFormatConverter(&pConverter);
pConverter->Initialize(
    pSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, 
    NULL0.0f, WICBitmapPaletteTypeCustom);
 
// ID2D1Bitamp 객체 생성.
ID2D1Bitmap* pBitmap = NULL;
gp_render_target->CreateBitmapFromWicBitmap(pConverter, NULL&pBitmap);
 
// 렌더타겟에 비트맵 그리기.
D2D1_SIZE_F renderTargetSize = gp_render_target->GetSize();
gp_render_target->DrawBitmap(
    pBitmap, D2D1::RectF(0.0f, 0.0f, pBitmap->GetSize().width, pBitmap->GetSize().height));
cs

-리소스로부터 비트맵 로드

 

'::public > 윈도우즈 응용 프로그래밍' 카테고리의 다른 글

Direct2D - 텍스트  (0) 2019.09.30
Direct2D - 붓(Brush)  (0) 2019.09.27
Direct2D - 기하  (0) 2019.09.26
Direct2D - 변환  (0) 2019.09.26
Direct2D - 렌더타겟  (0) 2019.09.26