[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
本主题向你展示如何在 BitmapEncoder 上设置编码选项。使用编码选项,你可以对编码器的行为和参数进行微调。例如,你可以在 JPEG 编码器上设置 ImageQuality 选项以控制图像质量与文件大小间的平衡。一般来说,你无需使用编码选项,因为编码器将自动选择适当的默认值。
编码选项仅由 BitmapEncoder 的 CreateAsync 和 GoToNextFrameAsync 方法公开。这是因为你必须在初始化编码器或框架时指定编码选项。
你需要了解的内容
技术
先决条件
- 你应当能够创建使用 JavaScript 的基本 Windows 运行时应用。有关详细信息,请参阅构建你的第一个使用 JavaScript 的 Windows 运行时应用。
- 你应当了解如何使用 BitmapEncoder 来编码图像。有关详细信息,请参阅如何对新图像进行编码。
编码选项参考
你可以使用此处带有 BitmapEncoder 的编码选项。编码选项由其名称(其名称是一个字符串)和一个采用特定数据类型 (Windows.Foundation.PropertyType) 的值定义。
名称 | PropertyType | 使用说明 | 有效格式 |
---|---|---|---|
ImageQuality | 单个 | 有效值从 0 到 1.0。较高的值表示较高的质量。 | JPEG、JPEG-XR |
CompressionQuality | 单个 | 有效值从 0 到 1.0。较高的值表示较高的效率和较低的压缩模式。 | TIFF |
无损 | boolean | 如果此参数设置为 true,则将忽略 ImageQuality 选项。 | JPEG-XR |
InterlaceOption | boolean | 是否隔行扫描图像。 | PNG |
FilterOption | uint8 | 使用 PngFilterMode 枚举。 | PNG |
TiffCompressionMethod | uint8 | 使用 TiffCompressionMode 枚举。 | TIFF |
亮度 | uint32Array | 包含亮度量化常数的 64 个元素的数组。 | JPEG |
色度 | uint32Array | 包含色度量化常数的 64 个元素的数组。 | JPEG |
JpegYCrCbSubsampling | uint8 | 使用 JpegSubsamplingMode 枚举。 | JPEG |
SuppressApp0 | boolean | 是否取消 App0 元数据块的创建。 | JPEG |
EnableV5Header32bppBGRA | boolean | 是否编码到支持 alpha 的版本 5 BMP。 | BMP |
说明
步骤 1: 获取输出流
将接收从文件中打开的 IRandomAccessStream 的函数的开始写入要编码的文件。你必须使用通过 ReadWrite 权限打开的流。
function (stream) {
注意 此示例假定你正编码为 JPEG 图像。编码选项指定为图像格式。
若要了解如何获取输出流,请参阅如何对新图像进行编码
步骤 2: 创建编码选项的集合
使用 BitmapPropertySet 对象存储一个或多个编码选项。每个编码选项都是一个键值对。键是一个设置为编码选项的名称的字符串,例如 ImageQuality。值为 BitmapTypedValue 对象,它允许你将实际编码选项值与显式数据类型 (Windows.Foundation.PropertyType) 相关联。
本例向你展示如何设置 JPEG 编码器以使用最高可用质量。若要设置质量,请创建一个编码选项,其中具有键 ImageQuality 并将值设置为单精度数 1.0(表示最高有效值)。
var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet();
var qualityValue = new Windows.Graphics.Imaging.BitmapTypedValue(
1.0, // Maximum quality
Windows.Foundation.PropertyType.single
);
propertySet.insert("ImageQuality", qualityValue);
步骤 3: 使用编码选项初始化编码器
将具有编码选项的 CreateAsync 方法用作最后一个参数。
Windows.Graphics.Imaging.BitmapEncoder.createAsync(
Windows.Graphics.Imaging.BitmapEncoder.jpegEncoderId,
stream,
propertySet
).then(function (encoder) {
// Encoder is initialized with encoding options.
});
现在,你拥有一个可以正常使用的编码器了。