Partager via


Comment couper une source bitmap

Cette rubrique montre comment obtenir une partie rectangulaire d’un IWICBitmapSource à l’aide d’un composant IWICBitmapClipper .

Pour couper 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;
    
    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 de cet exemple est un fichier JPEG, la première image (0) est utilisée. Pour connaître 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 IWICBitmapClipper à utiliser pour la capture d’image.

    IWICBitmapClipper *pIClipper = NULL;
    
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper);
    }
    
  5. Initialisez l’objet clipper avec les données d’image dans le rectangle donné du cadre bitmap.

    // 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. Dessinez ou traitez l’image clippée.

    L’illustration suivante illustre la capture d’image. L’image d’origine à gauche est de 200 x 130 pixels. L’image à droite est l’image d’origine clippée dans un rectangle défini comme {20,20,100,100}.

    illustration de la capture d’image

Voir aussi

Guide de programmation

Référence

Exemples