Share via


Comment charger une bitmap à partir d’un fichier

Direct2D utilise le composant d’acquisition d’images Windows (WIC) pour charger des bitmaps. Pour charger une bitmap à partir d’un fichier, utilisez d’abord des objets WIC pour charger l’image et la convertir dans un format compatible direct2D, puis utilisez la méthode CreateBitmapFromWicBitmap pour créer un ID2D1Bitmap.

  1. Créez un IWICBitmapDecoder à l’aide de la méthode IWICImagingFactory::CreateDecoderFromFileName .

    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. Récupérez un cadre de l’image et stockez-le dans un objet IWICBitmapFrameDecode .

        if (SUCCEEDED(hr))
        {
            // Create the initial frame.
            hr = pDecoder->GetFrame(0, &pSource);
        }
    
  3. La bitmap doit être convertie dans un format que Direct2D peut utiliser. Par conséquent, convertissez le format de pixels de l’image en 32bppPBGRA. (Pour obtenir la liste des formats pris en charge, consultez Formats de pixels et modes Alpha.). Appelez la méthode IWICImagingFactory::CreateFormatConverter pour créer un objet IWICFormatConverter, puis appelez la méthode Initialize de l’objet IWICFormatConverter pour effectuer la conversion.

        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. Appelez la méthode CreateBitmapFromWicBitmap pour créer un objet ID2D1Bitmap qui peut être dessiné par une cible de rendu et utilisé avec d’autres objets Direct2D.

        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;
    }
    

Certains codes ont été omis dans cet exemple.

ID2D1Bitmap

CreateBitmapFromWicBitmap

Comment charger une bitmap à partir d’une ressource