BitmapEncoder 类

定义

包含用于创建、编辑和保存图像的方法。

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
继承
Object Platform::Object IInspectable 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 设置当前帧的图像数据。

适用于

另请参阅