Delen via


Een bitmapbron knippen

In dit onderwerp ziet u hoe u een rechthoekig gedeelte van een IWICBitmapSource kunt verkrijgen met behulp van een IWICBitmapClipper-onderdeel.

Een bitmapbron knippen

  1. Maak een IWICImagingFactory-object om WIC-objecten (Windows Imaging Component) te maken.

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. Gebruik de methode CreateDecoderFromFilename om een IWICBitmapDecoder- te maken op basis van een afbeeldingsbestand.

    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. Haal de eerste IWICBitmapFrameDecode van de afbeelding op.

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

    De JPEG-bestandsindeling ondersteunt slechts één frame. Omdat het bestand in dit voorbeeld een JPEG-bestand is, wordt het eerste frame (0) gebruikt. Zie voor afbeeldingsindelingen met meerdere frames Het ophalen van de frames van een afbeelding voor toegang tot elk frame van de afbeelding.

  4. Maak de IWICBitmapClipper aan voor het uitsnijden van de afbeelding.

    IWICBitmapClipper *pIClipper = NULL;
    
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper);
    }
    
  5. Initialiseer het clipperobject met de afbeeldingsgegevens in de opgegeven rechthoek van het bitmapframe.

    // 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. Teken of verwerk de geknipte afbeelding.

    In de volgende afbeelding ziet u afbeeldingsopname. De oorspronkelijke afbeelding aan de linkerkant is 200 x 130 pixels. De afbeelding aan de rechterkant is de oorspronkelijke afbeelding die is geknipt naar een rechthoek die is gedefinieerd als {20,20,100,100}.

    illustratie van het bijsnijden van afbeeldingen

Zie ook

Programmeringshandleiding

Referentie

Voorbeelden