Поделиться через


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.

Применяется к

См. также раздел