Direct2D는 WIC(Windows 이미징 구성 요소)를 사용하여 비트맵을 로드합니다. 파일에서 비트맵을 로드하려면 먼저 WIC 개체를 사용하여 이미지를 로드하고 Direct2D 호환 형식으로 변환한 다음 CreateBitmapFromWicBitmap 메서드를 사용하여 ID2D1Bitmap만듭니다.
IWICImagingFactory::CreateDecoderFromFileName 메서드를 사용하여 IWICBitmapDecoder 만듭니다.
HRESULT DemoApp::LoadBitmapFromFile( ID2D1RenderTarget *pRenderTarget, IWICImagingFactory *pIWICFactory, PCWSTR uri, UINT destinationWidth, UINT destinationHeight, ID2D1Bitmap **ppBitmap ) { IWICBitmapDecoder *pDecoder = NULL; IWICBitmapFrameDecode *pSource = NULL; IWICStream *pStream = NULL; IWICFormatConverter *pConverter = NULL; IWICBitmapScaler *pScaler = NULL; HRESULT hr = pIWICFactory->CreateDecoderFromFilename( uri, NULL, GENERIC_READ, WICDecodeMetadataCacheOnLoad, &pDecoder );
이미지에서 프레임을 검색하고 IWICBitmapFrameDecode 개체에 프레임을 저장합니다.
if (SUCCEEDED(hr)) { // Create the initial frame. hr = pDecoder->GetFrame(0, &pSource); }
비트맵은 Direct2D에서 사용할 수 있는 형식으로 변환되어야 하므로 이미지의 픽셀 형식을 32bppPBGRA로 변환합니다. (지원되는 형식 목록은 픽셀 형식 및 알파 모드를 참조하세요.). IWICImagingFactory::CreateFormatConverter 메서드를 호출하여 IWICFormatConverter 개체를 만든 다음, IWICFormatConverter 개체의 Initialize 메서드를 호출하여 변환을 수행합니다.
if (SUCCEEDED(hr)) { // Convert the image format to 32bppPBGRA // (DXGI_FORMAT_B8G8R8A8_UNORM + D2D1_ALPHA_MODE_PREMULTIPLIED). hr = pIWICFactory->CreateFormatConverter(&pConverter); } if (SUCCEEDED(hr)) { hr = pConverter->Initialize( pSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.f, WICBitmapPaletteTypeMedianCut );
CreateBitmapFromWicBitmap 메서드를 호출하여 렌더링 대상에 의해 그려지고 다른 Direct2D 개체와 함께 사용할 수 있는 ID2D1Bitmap 개체를 만듭니다.
if (SUCCEEDED(hr)) { // Create a Direct2D bitmap from the WIC bitmap. hr = pRenderTarget->CreateBitmapFromWicBitmap( pConverter, NULL, ppBitmap ); } SafeRelease(&pDecoder); SafeRelease(&pSource); SafeRelease(&pStream); SafeRelease(&pConverter); SafeRelease(&pScaler); return hr; }
일부 코드는 이 예제에서 생략되었습니다.
관련 항목