位图源效果

使用位图源效果从 IWICBitmapSource 生成 ID2D1Image,以用作效果图中的输入。 此效果在 CPU 上执行缩放和旋转。 它还可以选择生成系统内存 mipmap,它可以是一种性能优化,用于以各种降低分辨率主动缩放非常大的图像。

注意

位图源效果将其输入作为属性,而不是图像输入。 必须使用 SetValue 方法,而不是 SetInput 方法。 WicBitmapSource 属性是指定图像输入数据的位置。

此效果的 CLSID CLSID_D2D1BitmapSource。

效果属性

显示名称和索引枚举 描述
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
IWICBitmapSource 包含要加载的图像数据。
此类型 IWICBitmapSource
默认值为 NULL。
规模
D2D1_BITMAPSOURCE_PROP_SCALE
X 和 Y 方向的刻度量。 效果将宽度乘以 X 值,高度乘以 Y 值。 此属性是定义为:(X 刻度、Y 刻度)的D2D1_VECTOR_2F。 刻度量为 FLOAT、无单位,必须为正数或 0。
类型为D2D1_VECTOR_2F。
默认值为 {1.0f, 1.0f}。
InterpolationMode。
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
用于缩放图像的内插模式。 有关详细信息,请参阅 内插模式
如果模式禁用 mipmap,则 BitmapSouce 将在缩放和 EnableDPICorrection 属性确定的分辨率处缓存图像。
类型为D2D1_BITMAPSOURCE_INTERPOLATION_MODE。
默认值为D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR。
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
如果将此项设置为 TRUE,效果将缩放输入图像,以将 IWICBitmapSource 报告的 DPI 转换为设备上下文的 DPI。 该效果使用使用 InterpolationMode 属性设置的内插模式。 如果将此项设置为 FALSE,效果将使用输出图像的 DPI 为 96.0。
类型为 BOOL。
默认值为 FALSE。
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
输出的 alpha 模式。 这可以是预乘的,也可以是直接的。 有关详细信息,请参阅 Alpha 模式
类型为D2D1_BITMAPSOURCE_ALPHA_MODE。
默认值为D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED。
取向
D2D1_BITMAPSOURCE_PROP_ORIENTATION
要对图像执行的翻转和/或旋转作。 有关详细信息,请参阅 方向
类型为D2D1_BITMAPSOURCE_ORIENTATION。
默认值为D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT。

内插模式

当它缩放图像或更正 DPI 时,该效果将使用此模式进行内插。 此效果使用的内插模式由 CPU 而不是 GPU 计算。

名字 描述
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR 对最近的单一点进行采样,并使用它。 不生成 mipmap。
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR 使用四点样本和线性内插。 不生成 mipmap。
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC 使用 16 个样本立方内核进行内插。 不生成 mipmap。
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT 使用 WIC 风扇内插,与 IWICBitmapScaler 接口相同。 不生成 mipmap。
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR 使用双线性内插在系统内存中生成 mipmap 链。 对于每个 mipmap,效果使用双线性内插缩放到最接近的 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;
       }
}

Alpha 模式

名字 描述
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED 效果输出使用预乘 alpha。
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT 效果输出使用直 alpha。

言论

若要在结合使用 WIC 和 Direct2D 时优化性能,应使用 IWICFormatConverter,以转换为基于应用方案和图像本机精度的适当像素格式。

在大多数情况下,你的应用 Direct2D 管道只需要每通道 8 位(bpc)精度,或者图像仅提供 8 bpc 精度,因此应转换为GUID_WICPixelFormat32bppPBGRA。 但是,如果要利用图像提供的额外精度(例如,以大于 8 bpc 精度存储的 JPEG-XR 或 TIFF),则应使用基于 RGBA 的像素格式。 下表提供了更多详细信息。

所需精度 图像的本机精度 建议的像素格式
每个通道 8 位 <= 每个通道 8 位 GUID_WICPixelFormat32bppPBGRA
尽可能高 <= 每个通道 8 位 GUID_WICPixelFormat32bppPBGRA
尽可能高 每个通道 > 8 位 RGBA 通道顺序,预乘 alpha

由于许多图像格式支持多个精度级别,因此应使用 IWICBitmapSource::GetPixelFormat 获取图像的本机像素格式,然后使用 IWICPixelFormatInfo 来确定每个精度通道的精度有多少位可用于该格式。 此外,请注意,并非所有硬件都支持高精度像素格式。 在这些情况下,你的应用可能需要回退到 WARP 设备以支持高精度。

要求

要求 价值
支持的最低客户端 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
支持的最低服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
页眉 d2d1effects.h
图书馆 d2d1.lib、dxguid.lib

ID2D1Effect