位图源效果

使用位图源效果从 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 将在缩放和 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 Microsoft Store应用]
最低受支持的服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用|Windows Microsoft Store应用]
标头 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect