Sdílet prostřednictvím


Jak vystřižovat zdroj rastrového obrázku

Toto téma ukazuje, jak získat obdélníkovou část IWICBitmapSource pomocí komponenty IWICBitmapClipper.

Oříznout zdroj rastrového obrázku

  1. Vytvořte objekt IWICImagingFactory pro vytvoření objektů wic (Windows Imaging Component).

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. Pomocí metody CreateDecoderFromFilename vytvořte IWICBitmapDecoder ze souboru obrázku.

    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. Získejte první IWICBitmapFrameDecode obrazu.

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

    Formát souboru JPEG podporuje pouze jeden rámec. Vzhledem k tomu, že soubor v tomto příkladu je soubor JPEG, použije se první snímek (0). Formáty obrázků, které mají více snímků, najdete v tématu Jak načíst rámce obrázku pro přístup k jednotlivým snímkům obrázku.

  4. Vytvořte IWICBitmapClipper pro použití na oříznutí obrázku.

    IWICBitmapClipper *pIClipper = NULL;
    
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper);
    }
    
  5. Inicializujte objekt clipper s obrazovými daty v daném obdélníku bitmapového rámečku.

    // 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. Nakreslete nebo zpracujte oříznutý obrázek.

    Následující ilustrace demonstruje oříznutí v rámci zpracování obrazů. Původní obrázek vlevo je 200 x 130 pixelů. Obrázek vpravo je původní obrázek oříznutý na obdélník definovaný jako {20,20,100,100}.

    obrázek výřezu obrázků

Viz také

Průvodce programováním

referenční

ukázky