位图源效果

使用位图源效果从 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 值。 此属性D2D1_VECTOR_2F定义为: (X 刻度、Y 缩放) 。 刻度量为 FLOAT、无单位,必须为正或 0。
类型为D2D1_VECTOR_2F。
默认值为 {1.0f, 1.0f}。
InterpolationMode。
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
用于缩放图像的内插模式。 有关详细信息 ,请参阅内插模式
如果模式禁用 mipmap,则 BitmapSouce 将以 Scale 和 EnableDPICorrection 属性确定的分辨率缓存图像。
类型为D2D1_BITMAPSOURCE_INTERPOLATION_MODE。
默认值为 D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR。
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
如果将其设置为 TRUE,则效果将缩放输入图像,以将 IWICBitmapSource 报告的 DPI 转换为设备上下文的 DPI。 该效果使用使用 InterpolationMode 属性设置的内插模式。 如果将此设置为 FALSE,则效果对输出图像使用 96.0 的 DPI。
类型为 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 度。

此代码片段演示如何从 propkey.h) 中定义的 EXIF 方向值 (转换为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