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


Эффект источника растрового изображения

Используйте эффект источника растрового изображения для создания ID2D1Image из источника IWICBitmapSource для использования в качестве входных данных в графе эффектов. Этот эффект выполняет масштабирование и вращение процессора. Он также может опционально генерировать MIP-карту системной памяти, которая может быть оптимизацией производительности для активного масштабирования очень больших изображений с различными уменьшенными разрешениями.

Замечание

Исходный эффект растрового изображения принимает свои входные данные как свойство, а не как входные данные изображения. Необходимо использовать метод SetValue , а не метод SetInput . Свойство WicBitmapSource — это место, где вы указываете входные данные изображения.

CLSID для этого эффекта равен CLSID_D2D1BitmapSource.

Свойства эффекта

Отображаемое имя и список индексов Описание
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
IWICBitmapSource, содержащий данные изображения, которые необходимо загрузить.
Тип — IWICBitmapSource.
Значение по умолчанию — NULL.
Шкала
D2D1_BITMAPSOURCE_PROP_SCALE
Величина шкалы по осям X и Y. В результате ширина умножается на значение X, а высота — на значение Y. Это свойство представляет собой D2D1_VECTOR_2F, определенный как: (Масштаб X, Масштаб Y). Масштабируемые суммы имеют значение FLOAT, unitless и должны быть положительными или 0.
Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
Режим интерполяции.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Режим интерполяции, используемый для масштабирования изображения. Дополнительные сведения см. в режимах интерполяции.
Если режим отключает MIPMAP, то BitmapSource кэширует изображение с разрешением, определенным свойствами Scale и EnableDPICorrection.
Тип – D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
Значение по умолчанию — D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Если для этого параметра задано значение TRUE, эффект будет масштабировать входное изображение для преобразования DPI, сообщаемого IWICBitmapSource , в DPI контекста устройства. В эффекте используется режим интерполяции, заданный с помощью свойства InterpolationMode. Если для этого параметра задано значение FALSE, эффект использует DPI 96,0 для выходного изображения.
Тип — BOOL.
Значение по умолчанию — FALSE.
Альфа-режим
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
Альфа-режим выходных данных. Это может быть как предварительно умноженное, так и прямое. Дополнительные сведения см. в альфа-режимах.
Тип – D2D1_BITMAPSOURCE_ALPHA_MODE.
Значение по умолчанию — D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Ориентация
D2D1_BITMAPSOURCE_PROP_ORIENTATION
Операция переворота и/или поворота, выполняемая на изображении. Для получения дополнительной информации см. Ориентация .
Тип – D2D1_BITMAPSOURCE_ORIENTATION.
Значение по умолчанию — D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Режимы интерполяции

Эффект интерполируется с помощью этого режима при масштабировании изображения или при коррекции DPI. Режимы интерполяции, используемые этим эффектом, рассчитываются центральным процессором, а не графическим процессором.

Имя Описание
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Выбирает ближайшую единственную точку и использует её. Не генерирует MIP-карту.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Использует четырехточечный образец и линейную интерполяцию. Не генерирует MIP-карту.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Использует 16 примеров кубового ядра для интерполяции. Не генерирует MIP-карту.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Использует интерполяцию WIC, аналогичную интерфейсу IWICBitmapScaler . Не генерирует MIP-карту.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Генерирует цепочку MIP-карт в системной памяти с использованием билинейной интерполяции. Для каждой MIP-карты эффект масштабируется с точностью, кратной 0,5, с помощью билинейной интерполяции, а затем масштабируется оставшаяся величина с помощью линейной интерполяции.

Ориентация

Свойство Orientation можно использовать для применения флага ориентации EXIF, встроенного в изображение.

Имя Описание
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT По умолчанию. Этот эффект не изменяет ориентацию ввода.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Переворачивает изображение по горизонтали.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Поворачивает изображение по часовой стрелке на 180 градусов.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Поворачивает изображение по часовой стрелке на 180 градусов и переворачивает его по горизонтали.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Поворачивает изображение по часовой стрелке на 270 градусов и переворачивает его по горизонтали.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Поворачивает изображение по часовой стрелке на 90 градусов.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Поворачивает изображение по часовой стрелке на 90 градусов и переворачивает его по горизонтали.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Поворачивает изображение по часовой стрелке на 270 градусов.

Этот фрагмент кода демонстрирует, как преобразовать значения ориентации EXIF (определенные в propkey.h) в значения D2D1_BITMAPSOURCE_ORIENTATION.

#include <propkey.h>
#include <d2d1effects.h>

D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
       switch (PhotoOrientation)
       {
       case PHOTO_ORIENTATION_NORMAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       case PHOTO_ORIENTATION_FLIPHORIZONTAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE180:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
       case PHOTO_ORIENTATION_FLIPVERTICAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_TRANSPOSE: 
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE270:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
       case PHOTO_ORIENTATION_TRANSVERSE:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE90:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
       default:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       }
}

Альфа-режимы

Имя Описание
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED Для вывода эффекта используется предварительно умноженная альфа-канал.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT На выходе эффекта используется прямая альфа-канал.

Замечания

Чтобы оптимизировать производительность при совместном использовании WIC и Direct2D , следует использовать IWICFormatConverter для преобразования в соответствующий формат пикселей на основе сценария приложения и исходной точности изображения.

В большинстве случаев либо конвейеру Direct2D вашего приложения требуется точность всего 8 бит на канал (bpc), либо изображение обеспечивает точность только 8 бит на канал, поэтому следует преобразовать его в GUID_WICPixelFormat32bppPBGRA. Однако, если вы хотите воспользоваться преимуществами дополнительной точности, обеспечиваемой изображением (например, JPEG-XR или TIFF, хранящимся с точностью более 8 бит на канал), вам следует использовать формат пикселей на основе RGBA. Более подробная информация приведена в таблице ниже.

Желаемая точность Исходная точность изображения Рекомендуемый формат пикселей
8 бит на канал <= 8 бит на канал GUID_WICPixelFormat32bppPBGRA
Как можно выше <= 8 бит на канал GUID_WICPixelFormat32bppPBGRA
Как можно выше > 8 бит на канал Порядок каналов RGBA, предварительно умноженный альфа

Поскольку многие форматы изображений поддерживают несколько уровней точности, следует использовать IWICBitmapSource::GetPixelFormat для получения исходного пиксельного формата изображения, а затем использовать IWICPixelFormatInfo , чтобы определить, сколько битов на канал точности доступно для этого формата. Кроме того, обратите внимание, что не все оборудование поддерживает форматы пикселей с высокой точностью. В таких случаях вашему приложению может потребоваться вернуться к устройству WARP для поддержки высокой точности.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Минимальный поддерживаемый сервер Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Заголовок d2d1effects.h
Библиотека d2d1.lib, dxguid.lib

Эффект ID2D1