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