Compartir a través de


Escalado de un origen de mapa de bits

En este tema se muestra cómo escalar un IWICBitmapSource mediante el componente IWICBitmapScaler .

Para escalar 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;
    IWICBitmapScaler *pIScaler = 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 IWICBitmapScaler que se usará para el escalado de imágenes.

    // Create the scaler.
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapScaler(&pIScaler);
    }
    
  5. Inicialice el objeto scaler con los datos de imagen del marco de mapa de bits a la mitad del tamaño.

    // Initialize the scaler to half the size of the original source.
    if (SUCCEEDED(hr))
    {
       hr = pIScaler->Initialize(
          pIDecoderFrame,                    // Bitmap source to scale.
          uiWidth/2,                         // Scale width to half of original.
          uiHeight/2,                        // Scale height to half of original.
          WICBitmapInterpolationModeFant);   // Use Fant mode interpolation.
    }
    
  6. Dibuje o procese el origen del mapa de bits escalado.

    En la ilustración siguiente se muestra el escalado 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 escalada a la mitad del tamaño.

    Ilustración en la que se muestra el escalado de una imagen a un tamaño más pequeño

Consulte también

Guía de programación

Referencia

Muestras