位图源效果
使用位图源效果从 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 值。 此属性是定义为:(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 |