Megosztás a következőn keresztül:


Bitképforrás kivágása

Ez a témakör bemutatja, hogyan szerezhet be egy IWICBitmapSource téglalap alakú részét egy IWICBitmapClipper összetevő használatával.

Képpontkép forrásának kivágása

  1. Hozzon létre egy IWICImagingFactory objektumot a Windows Képalkotó összetevő (WIC) objektumainak létrehozásához.

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. A CreateDecoderFromFilename metódus használatával hozzon létre IWICBitmapDecoder egy képfájlból.

    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. Szerezze be a kép első IWICBitmapFrameDecode.

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

    A JPEG fájlformátum csak egyetlen keretet támogat. Mivel a példában szereplő fájl egy JPEG-fájl, az első képkockát (0) használja a rendszer. A több képkockával rendelkező képformátumokért lásd: Képkockák lekérése a kép minden egyes képkockájának eléréséhez.

  4. Hozzon létre egy IWICBitmapClipper eszközt a képkivágás céljából.

    IWICBitmapClipper *pIClipper = NULL;
    
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper);
    }
    
  5. Inicializálja a clipper objektumot a képadatokkal a bitképkeret megadott téglalapján belül.

    // 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. Rajzolja vagy dolgozza fel a levágott képet.

    Az alábbi ábra a képkivágást mutatja be. Az eredeti kép a bal oldalon 200 x 130 képpont. A jobb oldali kép az eredeti kép, amely egy {20,20,100,100}nevű téglalapra van vágva.

    a képkivágás illusztrációja

Lásd még:

programozási útmutató

referencia

Minták