Поделиться через


Как перевернуть и повернуть источник растрового изображения

В этом разделе показано, как повернуть IWICBitmapSource с помощью компонента IWICBitmapFlipRotator.

Перевернуть и повернуть источник растрового изображения

  1. Создайте объект IWICImagingFactory для создания объектов компонента образов Windows (WIC).

    // Create WIC factory
    hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&m_pIWICFactory)
        );
    
  2. Используйте метод CreateDecoderFromFilename для создания IWICBitmapDecoder из файла изображения.

    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. Получите первый IWICBitmapFrameDecode изображения.

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

    Формат ФАЙЛА JPEG поддерживает только один кадр. Так как файл в этом примере является JPEG-файлом, используется первый кадр (0). Форматы изображений с несколькими кадрами см. в разделе Как получить кадры изображения для доступа к каждому кадру изображения.

  4. Создайте IWICBitmapFlipRotator для переворачивания изображения.

    // Create the flip/rotator.
    if (SUCCEEDED(hr))
    {
       hr = m_pIWICFactory->CreateBitmapFlipRotator(&pIFlipRotator);
    }
    
  5. Инициализировать объект переворота/вращателя с данными изображения, полученными из кадра растрового изображения, перевернутого по горизонтали (вдоль вертикальной оси Y).

    // 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.
    }
    

    Дополнительные повороты и параметры перевернутости см. вWICBitmapTransformOptions.

  6. Рисование или обработка перевернутого источника растрового изображения.

    Заметка

    Интерфейс IWICBitmapFlipRotator наследует от интерфейса IWICBitmapSource, поэтому можно использовать инициализированный объект flip/rotator в любом месте, принимающее IWICBitmapSource.

     

    На следующем рисунке показано переворачивание изображения по горизонтали (по вертикальной оси x).

    иллюстрация, показывающая горизонтальное отражение (вдоль вертикальной оси x) изображения

См. также

Руководство по программированию

Справочник

примеры