Condividi tramite


Come caricare una bitmap da un file

Direct2D usa windows Imaging Component (WIC) per caricare le bitmap. Per caricare una bitmap da un file, usare prima oggetti WIC per caricare l'immagine e convertirla in un formato compatibile con Direct2D, quindi usare il metodo CreateBitmapFromWicBitmap per creare un OGGETTO ID2D1Bitmap.

  1. Creare un oggetto IWICBitmapDecoder usando il metodo 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. Recuperare un frame dall'immagine e archiviare il frame in un oggetto IWICBitmapFrameDecode .

        if (SUCCEEDED(hr))
        {
            // Create the initial frame.
            hr = pDecoder->GetFrame(0, &pSource);
        }
    
  3. La bitmap deve essere convertita in un formato utilizzabile da Direct2D, quindi convertire il formato pixel dell'immagine in 32bppPGRA. Per un elenco dei formati supportati, vedere Formati pixel e modalità alfa. Chiamare il metodo IWICImagingFactory::CreateFormatConverter per creare un oggetto IWICFormatConverter, quindi chiamare il metodo Initialize dell'oggetto IWICFormatConverter per eseguire la conversione.

        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. Chiamare il metodo CreateBitmapFromWicBitmap per creare un oggetto ID2D1Bitmap che può essere disegnato da una destinazione di rendering e usato con altri oggetti 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;
    }
    

Alcuni codici sono stati omessi da questo esempio.

ID2D1Bitmap

CreateBitmapFromWicBitmap

Come caricare una bitmap da una risorsa