Direct2D를 사용하여 BitmapSource를 그리는 방법
이 항목에서는 Direct2D를 사용하여 IWICBitmapSource 를 그리는 프로세스를 보여 줍니다.
Direct2D를 사용하여 비트맵 원본을 그리려면
원본 이미지를 디코딩하고 비트맵 원본을 가져옵니다. 이 예제에서는 IWICBitmapDecoder 를 사용하여 이미지를 디코딩하고 첫 번째 이미지 프레임을 검색합니다.
// Create a decoder IWICBitmapDecoder *pDecoder = NULL; hr = m_pIWICFactory->CreateDecoderFromFilename( szFileName, // Image to be decoded NULL, // Do not prefer a particular vendor GENERIC_READ, // Desired read access to the file WICDecodeMetadataCacheOnDemand, // Cache metadata when needed &pDecoder // Pointer to the decoder ); // Retrieve the first frame of the image from the decoder IWICBitmapFrameDecode *pFrame = NULL; if (SUCCEEDED(hr)) { hr = pDecoder->GetFrame(0, &pFrame); }
그릴 비트맵 원본의 추가 형식은 비트맵 원본 개요를 참조하세요.
비트맵 원본을 32bppPBGRA 픽셀 형식으로 변환합니다.
Direct2D에서 이미지를 사용하려면 먼저 32bppPBGRA 픽셀 형식으로 변환해야 합니다. 이미지 형식을 변환하려면 CreateFormatConverter 메서드를 사용하여 IWICFormatConverter 개체를 만듭니다. 만든 후에는 Initialize 메서드를 사용하여 변환을 수행합니다.
// Format convert the frame to 32bppPBGRA if (SUCCEEDED(hr)) { SafeRelease(&m_pConvertedSourceBitmap); hr = m_pIWICFactory->CreateFormatConverter(&m_pConvertedSourceBitmap); } if (SUCCEEDED(hr)) { hr = m_pConvertedSourceBitmap->Initialize( pFrame, // Input bitmap to convert GUID_WICPixelFormat32bppPBGRA, // Destination pixel format WICBitmapDitherTypeNone, // Specified dither pattern NULL, // Specify a particular palette 0.f, // Alpha threshold WICBitmapPaletteTypeCustom // Palette translation type ); }
창 핸들에 렌더링할 ID2D1RenderTarget 개체를 만듭니다.
// Create a D2D render target properties D2D1_RENDER_TARGET_PROPERTIES renderTargetProperties = D2D1::RenderTargetProperties(); // Set the DPI to be the default system DPI to allow direct mapping // between image pixels and desktop pixels in different system DPI settings renderTargetProperties.dpiX = DEFAULT_DPI; renderTargetProperties.dpiY = DEFAULT_DPI; // Create a D2D render target D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top); hr = m_pD2DFactory->CreateHwndRenderTarget( renderTargetProperties, D2D1::HwndRenderTargetProperties(hWnd, size), &m_pRT );
렌더링 대상에 대한 자세한 내용은 Direct2D 렌더링 대상 개요를 참조하세요.
ID2D1RenderTarget::CreateBitmapFromWicBitmap 메서드를 사용하여 ID2D1Bitmap 개체를 만듭니다.
// D2DBitmap may have been released due to device loss. // If so, re-create it from the source bitmap if (m_pConvertedSourceBitmap && !m_pD2DBitmap) { m_pRT->CreateBitmapFromWicBitmap(m_pConvertedSourceBitmap, NULL, &m_pD2DBitmap); }
D2D ID2D1RenderTarget::D rawBitmap 메서드를 사용하여 ID2D1Bitmap을 그립니다.
// Draws an image and scales it to the current window size if (m_pD2DBitmap) { m_pRT->DrawBitmap(m_pD2DBitmap, rectangle); }
이 예제에서는 코드를 생략합니다. 전체 코드는 Direct2D 샘플을 사용하여 WIC 이미지 뷰어를 참조하세요.
참고 항목