BitmapEncoder 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
包含用于创建、编辑和保存图像的方法。
public ref class BitmapEncoder sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class BitmapEncoder final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class BitmapEncoder
Public NotInheritable Class BitmapEncoder
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
下面是创建编码器对象的部分示例。 此示例假定你选择了一个具有 Windows.Storage.Pickers.FileSavePicker 的文件。 有关选择文件、创建编码器和对图像进行编码的完整说明,请参阅 映像
private async void SaveSoftwareBitmapToFile(SoftwareBitmap softwareBitmap, StorageFile outputFile)
{
using (IRandomAccessStream stream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
{
// Create an encoder with the desired format
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
// Set the software bitmap
encoder.SetSoftwareBitmap(softwareBitmap);
// Set additional encoding parameters, if needed
encoder.BitmapTransform.ScaledWidth = 320;
encoder.BitmapTransform.ScaledHeight = 240;
encoder.BitmapTransform.Rotation = Windows.Graphics.Imaging.BitmapRotation.Clockwise90Degrees;
encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant;
encoder.IsThumbnailGenerated = true;
try
{
await encoder.FlushAsync();
}
catch (Exception err)
{
const int WINCODEC_ERR_UNSUPPORTEDOPERATION = unchecked((int)0x88982F81);
switch (err.HResult)
{
case WINCODEC_ERR_UNSUPPORTEDOPERATION:
// If the encoder does not support writing a thumbnail, then try again
// but disable thumbnail generation.
encoder.IsThumbnailGenerated = false;
break;
default:
throw;
}
}
if (encoder.IsThumbnailGenerated == false)
{
await encoder.FlushAsync();
}
}
}
注解
图像格式
BitmapEncoder 可以编码以下格式。
- JPEG
- PNG
- GIF
- TIFF
- BMP
- JPEG-XR
有关解码格式的列表,请参阅 BitmapDecoder 主题。
BitmapEncoder 的行为与 BitmapDecoder 不同,因为它不提供对图像中帧的随机访问。 相反,你需要按特定顺序对编码器执行操作。
创建 BitmapEncoder 时,它提供对容器和第一帧上的数据的访问。 在第一个帧和容器上设置完数据后,如果不想对任何其他帧进行编码,请调用 FlushAsync 以完成编码操作。
如果要对其他帧进行编码,请调用 GoToNextFrameAsync。 这会提交容器和第一帧中的数据,因此你无法再编辑它们。 此时,对编码器执行的任何操作都将影响第二帧。 完成每个帧后,可以调用 GoToNextFrameAsync 来提交和追加新帧,或调用 FlushAsync 完成操作。位图编码器可能会公开影响编码输出文件的质量、大小和其他属性的各种编码选项。 有关详细信息,请参阅 映像。
版本历史记录
Windows 版本 | SDK 版本 | 已添加值 |
---|---|---|
1809 | 17763 | HeifEncoderId |
属性
BitmapContainerProperties |
容器的元数据。 |
BitmapProperties |
所选帧的元数据。 |
BitmapTransform |
一个 BitmapTransform 对象,用于指定帧位图的转换方式。 |
BmpEncoderId |
内置 BMP 编码器的唯一标识符。 |
EncoderInformation |
有关位图编码器的信息。 |
GeneratedThumbnailHeight |
任何生成的缩略图的高度(以像素为单位)。 |
GeneratedThumbnailWidth |
任何生成的缩略图的宽度(以像素为单位)。 |
GifEncoderId |
内置 GIF 编码器的唯一标识符。 |
HeifEncoderId |
内置 HEIF 编码器的唯一标识符。 |
IsThumbnailGenerated |
指示是否自动生成新的缩略图。 |
JpegEncoderId |
内置 JPEG 编码器的唯一标识符。 |
JpegXREncoderId |
内置 JPEG-XR 编码器的唯一标识符。 |
PngEncoderId |
内置 PNG 编码器的唯一标识符。 |
TiffEncoderId |
内置 TIFF 编码器的唯一标识符。 |
方法
CreateAsync(Guid, IRandomAccessStream) |
异步创建新的 BitmapEncoder。 |
CreateAsync(Guid, IRandomAccessStream, IIterable<KeyValuePair<String,BitmapTypedValue>>) |
使用指定的编码选项为指定的编解码器异步创建一个新的 BitmapEncoder ,并在流上初始化它。 |
CreateForInPlacePropertyEncodingAsync(BitmapDecoder) |
异步创建新的 BitmapEncoder ,用于就地属性和元数据编辑。 新编码器只能就地编辑位图属性,并且将因任何其他用途而失败。 |
CreateForTranscodingAsync(IRandomAccessStream, BitmapDecoder) |
异步创建新的 BitmapEncoder ,并使用现有 BitmapDecoder 中的数据对其进行初始化。 |
FlushAsync() |
异步提交并刷新所有图像数据。 |
GetEncoderInformationEnumerator() |
系统上安装的位图编码器列表及其相关信息。 |
GoToNextFrameAsync() |
异步提交当前帧数据并追加要编辑的新空帧。 |
GoToNextFrameAsync(IIterable<KeyValuePair<String,BitmapTypedValue>>) |
异步提交当前帧数据,并追加一个新的空帧(具有指定的编码选项)进行编辑。 |
SetPixelData(BitmapPixelFormat, BitmapAlphaMode, UInt32, UInt32, Double, Double, Byte[]) |
设置帧上的像素数据。 |
SetSoftwareBitmap(SoftwareBitmap) |
使用指定的 SoftwareBitmap 设置当前帧的图像数据。 |