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


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

Используйте эффект источника растрового изображения, чтобы создать 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, без унитарных значений и должны быть положительными или 0.
Тип — D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
InterpolationMode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Режим интерполяции, используемый для масштабирования изображения. Дополнительные сведения см. в разделе Режимы интерполяции .
Если режим отключает MIP-карту, bitmapSouce кэширует изображение в разрешении, определенном свойствами 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.
AlphaMode
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. Режимы интерполяции, которые использует этот эффект, вычисляются ЦП, а не GPU.

Имя Описание
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 Использует интерполяцию 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 bpc), следует использовать формат пикселей на основе 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

ID2D1Effect