Compartir a través de


Cómo dibujar un elemento BitmapSource mediante Direct2D

En este tema se muestra el proceso para dibujar un IWICBitmapSource mediante Direct2D.

Para dibujar un origen de mapa de bits mediante Direct2D

  1. Descodifique una imagen de origen y obtenga un origen de mapa de bits. En este ejemplo, se usa un IWICBitmapDecoder para descodificar la imagen y se recupera el primer marco de imagen.

       // Create a decoder
       IWICBitmapDecoder *pDecoder = NULL;
    
       hr = m_pIWICFactory->CreateDecoderFromFilename(
           szFileName,                      // Image to be decoded
           NULL,                            // Do not prefer a particular vendor
           GENERIC_READ,                    // Desired read access to the file
           WICDecodeMetadataCacheOnDemand,  // Cache metadata when needed
           &pDecoder                        // Pointer to the decoder
           );
    
       // Retrieve the first frame of the image from the decoder
       IWICBitmapFrameDecode *pFrame = NULL;
    
       if (SUCCEEDED(hr))
       {
           hr = pDecoder->GetFrame(0, &pFrame);
       }
    

    Para obtener más tipos de orígenes de mapa de bits que se van a dibujar, vea Información general sobre orígenes de mapa de bits.

  2. Convierta el origen del mapa de bits en un formato de píxel 32bppPBGRA.

    Para que Direct2D pueda usar una imagen, debe convertirse al formato de píxel 32bppPBGRA. Para convertir el formato de imagen, use el método CreateFormatConverter para crear un objeto IWICFormatConverter . Una vez creado, use el método Initialize para realizar la conversión.

       // Format convert the frame to 32bppPBGRA
       if (SUCCEEDED(hr))
       {
           SafeRelease(&m_pConvertedSourceBitmap);
           hr = m_pIWICFactory->CreateFormatConverter(&m_pConvertedSourceBitmap);
       }
    
       if (SUCCEEDED(hr))
       {
           hr = m_pConvertedSourceBitmap->Initialize(
               pFrame,                          // Input bitmap to convert
               GUID_WICPixelFormat32bppPBGRA,   // Destination pixel format
               WICBitmapDitherTypeNone,         // Specified dither pattern
               NULL,                            // Specify a particular palette 
               0.f,                             // Alpha threshold
               WICBitmapPaletteTypeCustom       // Palette translation type
               );
       }
    
  3. Cree un objeto ID2D1RenderTarget para representarlo en un identificador de ventana.

       // Create a D2D render target properties
       D2D1_RENDER_TARGET_PROPERTIES renderTargetProperties = D2D1::RenderTargetProperties();
    
       // Set the DPI to be the default system DPI to allow direct mapping
       // between image pixels and desktop pixels in different system DPI settings
       renderTargetProperties.dpiX = DEFAULT_DPI;
       renderTargetProperties.dpiY = DEFAULT_DPI;
    
       // Create a D2D render target
       D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top);
    
       hr = m_pD2DFactory->CreateHwndRenderTarget(
           renderTargetProperties,
           D2D1::HwndRenderTargetProperties(hWnd, size),
           &m_pRT
           );
    

    Para obtener más información sobre los destinos de representación, consulta Información general sobre destinos de representación de Direct2D.

  4. Cree un objeto ID2D1Bitmap mediante el método ID2D1RenderTarget::CreateBitmapFromWicBitmap .

        // D2DBitmap may have been released due to device loss. 
        // If so, re-create it from the source bitmap
        if (m_pConvertedSourceBitmap && !m_pD2DBitmap)
        {
            m_pRT->CreateBitmapFromWicBitmap(m_pConvertedSourceBitmap, NULL, &m_pD2DBitmap);
        }
    
  5. Dibuje id2D1Bitmap mediante el método D2D ID2D1RenderTarget::D rawBitmap .

        // Draws an image and scales it to the current window size
        if (m_pD2DBitmap)
        {
            m_pRT->DrawBitmap(m_pD2DBitmap, rectangle);
        }
    

El código se ha omitido en este ejemplo. Para obtener el código completo, consulta el visor de imágenes de WIC con el ejemplo de Direct2D.

Consulte también

Guía de programación

Referencia

Muestras

Direct2D