Compartir a través de


Cómo recortar un origen de mapa de bits

En este tema se muestra cómo obtener una parte rectangular de un IWICBitmapSource mediante un componente IWICBitmapClipper .

Para recortar 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;
    
    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 IWICBitmapClipper que se usará para el recorte de imágenes.

    IWICBitmapClipper *pIClipper = NULL;
    
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper);
    }
    
  5. Inicialice el objeto clipper con los datos de imagen dentro del rectángulo especificado del marco de mapa de bits.

    // Create the clipping rectangle.
    WICRect rcClip = { 0, 0, uiWidth/2, uiHeight/2 };
    
    // Initialize the clipper with the given rectangle of the frame's image data.
    if (SUCCEEDED(hr))
    {
       hr = pIClipper->Initialize(pIDecoderFrame, &rcClip);
    }
    
  6. Dibuje o procese la imagen recortada.

    En la ilustración siguiente se muestra el recorte de imágenes. La imagen original de la izquierda es de 200 x 130 píxeles. La imagen de la derecha es la imagen original recortada en un rectángulo definido como {20,20,100,100}.

    ilustración del recorte de imágenes

Consulte también

Guía de programación

Referencia

Muestras