Skalieren einer Bitmapquelle

In diesem Thema wird veranschaulicht, wie Sie eine IWICBitmapSource mithilfe der IWICBitmapScaler-Komponente skalieren.

So skalieren Sie eine Bitmapquelle

  1. Erstellen Sie ein IWICImagingFactory-Objekt , um WIC-Objekte (Windows Imaging Component) zu erstellen.

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. Verwenden Sie die CreateDecoderFromFilename-Methode , um einen IWICBitmapDecoder aus einer Imagedatei zu erstellen.

    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. Rufen Sie den ersten IWICBitmapFrameDecode des Bilds ab.

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

    Das JPEG-Dateiformat unterstützt nur einen einzelnen Frame. Da es sich bei der Datei in diesem Beispiel um eine JPEG-Datei handelt, wird der erste Frame (0) verwendet. Bildformate mit mehreren Frames finden Sie unter Abrufen der Frames eines Bilds für den Zugriff auf jeden Frame des Bilds.

  4. Erstellen Sie den IWICBitmapScaler , der für die Bildskalierung verwendet werden soll.

    // Create the scaler.
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapScaler(&pIScaler);
    }
    
  5. Initialisieren Sie das Skalierungsobjekt mit den Bilddaten des Bitmaprahmens in der Hälfte der Größe.

    // 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. Zeichnen oder verarbeiten Sie die skalierte Bitmapquelle.

    Die folgende Abbildung veranschaulicht die Skalierung der Bildverarbeitung. Das originale Bild auf der linken Seite ist 200 x 130 Pixel. Das Bild auf der rechten Seite ist das originale Bild, das auf die Hälfte der Größe skaliert ist.

    Abbildung, die das Skalieren eines Bilds auf eine kleinere Größe zeigt

Weitere Informationen

Programmierhandbuch

Referenz

Beispiele