ファイルからビットマップを読み込む方法

Direct2D では、Windows イメージング コンポーネント (WIC) を使用してビットマップを読み込みます。 ファイルからビットマップを読み込むには、まず WIC オブジェクトを使用してイメージを読み込み、Direct2D 互換の形式に変換してから、 CreateBitmapFromWicBitmap メソッドを使用して ID2D1Bitmap を作成します。

  1. 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
            );
    
    
  2. イメージからフレームを取得し、 フレームを IWICBitmapFrameDecode オブジェクトに格納します。

        if (SUCCEEDED(hr))
        {
            // Create the initial frame.
            hr = pDecoder->GetFrame(0, &pSource);
        }
    
  3. ビットマップは 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
                );
    
  4. 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;
    }
    

この例では、一部のコードが省略されています。

ID2D1Bitmap

CreateBitmapFromWicBitmap

リソースからビットマップを読み込む方法