Partager via


Mise à l’échelle d’une source bitmap

Cette rubrique montre comment mettre à l’échelle un IWICBitmapSource à l’aide du composant IWICBitmapScaler .

Pour mettre à l’échelle une source bitmap

  1. Créez un objet IWICImagingFactory pour créer des objets WIC (Windows Imaging Component).

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. Utilisez la méthode CreateDecoderFromFilename pour créer un IWICBitmapDecoder à partir d’un fichier image.

    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. Obtenez le premier IWICBitmapFrameDecode de l’image.

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

    Le format de fichier JPEG ne prend en charge qu’une seule image. Étant donné que le fichier dans cet exemple est un fichier JPEG, le premier frame (0) est utilisé. Pour les formats d’image qui ont plusieurs images, consultez Comment récupérer les images d’une image pour accéder à chaque image de l’image.

  4. Créez le IWICBitmapScaler à utiliser pour la mise à l’échelle de l’image.

    // Create the scaler.
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapScaler(&pIScaler);
    }
    
  5. Initialisez l’objet scaler avec les données d’image du frame bitmap à la moitié de la taille.

    // 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. Dessinez ou traitez la source bitmap mise à l’échelle.

    L’illustration suivante illustre la mise à l’échelle de l’imagerie. L’image d’origine à gauche est de 200 x 130 pixels. L’image de droite est l’image d’origine mise à l’échelle à la moitié de la taille.

    illustration montrant la mise à l’échelle d’une image vers une taille plus petite

Voir aussi

Guide de programmation

Référence

Exemples