Freigeben über


Kippen und Drehen einer Bitmapquelle

In diesem Thema wird veranschaulicht, wie Eine IWICBitmapSource mithilfe einer IWICBitmapFlipRotator-Komponente gedreht wird.

So kippen und drehen 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 Bilddatei zu erstellen.

    HRESULT hr = S_OK;
    
    IWICBitmapDecoder *pIDecoder = NULL;
    IWICBitmapFrameDecode *pIDecoderFrame  = NULL;
    IWICBitmapFlipRotator *pIFlipRotator = 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 die Datei in diesem Beispiel eine JPEG-Datei ist, wird der erste Frame (0) verwendet. Informationen zu Bildformaten mit mehreren Frames finden Sie unter Abrufen der Frames eines Bilds für den Zugriff auf jeden Frame des Bilds.

  4. Erstellen Sie den IWICBitmapFlipRotator , der zum Spiegeln des Bilds verwendet werden soll.

    // Create the flip/rotator.
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapFlipRotator(&pIFlipRotator);
    }
    
  5. Initialisieren Sie das Flip-/Rotatorobjekt mit den Bilddaten des Bitmaprahmens, der horizontal (entlang der vertikalen y-Achse) gekippt wird.

    // Initialize the flip/rotator to flip the original source horizontally.
    if (SUCCEEDED(hr))
    {
       hr = pIFlipRotator->Initialize(
          pIDecoderFrame,                     // Bitmap source to flip.
          WICBitmapTransformFlipHorizontal);  // Flip the pixels along the 
                                              //  vertical y-axis.
    }
    

    Weitere Drehungen und Flippingoptionen finden Sie unter WICBitmapTransformOptions .

  6. Zeichnen oder verarbeiten Sie die gedrehte Bitmapquelle.

    Hinweis

    Die IWICBitmapFlipRotator-Schnittstelle erbt von der IWICBitmapSource-Schnittstelle , sodass Sie das initialisierte Flip-/Rotatorobjekt überall verwenden können, wo eine IWICBitmapSource akzeptiert wird.

     

    Die folgende Abbildung veranschaulicht das horizontale Kippen einer Abbildung (entlang der vertikalen x-Achse).

    Abbildung eines horizontalen Flips (entlang der Verital-X-Achse) eines Bilds

Weitere Informationen

Programmierhandbuch

Referenz

Beispiele