ファイルからビットマップを読み込む方法
Direct2D では、Windows イメージング コンポーネント (WIC) を使用してビットマップを読み込みます。 ファイルからビットマップを読み込むには、まず 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; }
この例では、一部のコードが省略されています。
関連トピック