Compartir a través de


Cómo voltear y girar un origen de mapa de bits

En este tema se muestra cómo girar un IWICBitmapSource mediante un componente IWICBitmapFlipRotator .

Para voltear y girar un origen de mapa de bits

  1. Cree un objeto IWICImagingFactory para crear objetos Windows Imaging Component (WIC).

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. Use el método CreateDecoderFromFilename para crear un IWICBitmapDecoder a partir de un archivo de imagen.

    HRESULT hr = S_OK;
    
    IWICBitmapDecoder *pIDecoder = NULL;
    IWICBitmapFrameDecode *pIDecoderFrame  = NULL;
    IWICBitmapFlipRotator *pIFlipRotator = NULL;
    
    hr = m_pIWICFactory->CreateDecoderFromFilename(
       L"turtle.jpg",                  // Image to be decoded
       NULL,                           // Do not prefer a particular vendor
       GENERIC_READ,                   // Desired read access to the file
       WICDecodeMetadataCacheOnDemand, // Cache metadata when needed
       &pIDecoder                      // Pointer to the decoder
       );
    
  3. Obtenga el primer IWICBitmapFrameDecode de la imagen.

    // Retrieve the first bitmap frame.
    if (SUCCEEDED(hr))
    {
       hr = pIDecoder->GetFrame(0, &pIDecoderFrame);
    }
    

    El formato de archivo JPEG solo admite un solo fotograma. Dado que el archivo de este ejemplo es un archivo JPEG, se usa el primer fotograma (0). Para los formatos de imagen que tienen varios marcos, consulte Cómo recuperar los fotogramas de una imagen para acceder a cada fotograma de la imagen.

  4. Cree el IWICBitmapFlipRotator que se usará para voltear la imagen.

    // Create the flip/rotator.
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapFlipRotator(&pIFlipRotator);
    }
    
  5. Inicialice el objeto flip/rotator con los datos de imagen del marco de mapa de bits volteado horizontalmente (a lo largo del eje Y vertical).

    // Initialize the flip/rotator to flip the original source horizontally.
    if (SUCCEEDED(hr))
    {
       hr = pIFlipRotator->Initialize(
          pIDecoderFrame,                     // Bitmap source to flip.
          WICBitmapTransformFlipHorizontal);  // Flip the pixels along the 
                                              //  vertical y-axis.
    }
    

    Consulte WICBitmapTransformOptions para obtener más rotaciones y opciones de volteo.

  6. Dibuje o procese el origen de mapa de bits volteado.

    Nota

    La interfaz IWICBitmapFlipRotator hereda de la interfaz IWICBitmapSource , por lo que puede usar el objeto flip/rotator inicializado en cualquier lugar que acepte un IWICBitmapSource.

     

    En la ilustración siguiente se muestra cómo voltear una imagen horizontalmente (a lo largo del eje X vertical).

    ilustración que muestra un volteo horizontal (a lo largo del eje X verital) de una imagen

Consulte también

Guía de programación

Referencia

Muestras