Freigeben über


BitmapEncoder Klasse

Definition

Enthält Methoden zum Erstellen, Bearbeiten und Speichern von Bildern.

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
Vererbung
Object Platform::Object IInspectable BitmapEncoder
Attribute

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

Beispiele

Hier sehen Sie ein teilbeispiel für das Erstellen eines Encoderobjekts. In diesem Beispiel wird davon ausgegangen, dass Sie eine Datei mit Windows.Storage.Pickers.FileSavePicker ausgewählt haben. Vollständige Anweisungen zum Auswählen einer Datei, zum Erstellen eines Encoders und zum Codieren eines Bilds finden Sie unter Imageerstellung.

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();
        }


    }
}

Hinweise

Bildformate

BitmapEncoder kann die folgenden Formate codieren.

  • JPEG
  • PNG
  • GIF
  • TIFF
  • BMP
  • JPEG-XR

Eine Liste der Decodierungsformate finden Sie im Thema BitmapDecoder .

BitmapEncoder verhält sich anders als BitmapDecoder , da es keinen zufälligen Zugriff auf die Frames in einem Bild bietet. Stattdessen müssen Sie Aktionen für den Encoder in einer bestimmten Reihenfolge ausführen.

Wenn Sie einen BitmapEncoder erstellen, bietet er Zugriff auf Daten im Container und im ersten Frame. Wenn Sie mit dem Festlegen von Daten für den ersten Frame und Container fertig sind, und wenn Sie keine zusätzlichen Frames codieren möchten, rufen Sie FlushAsync auf, um den Codierungsvorgang abzuschließen.

Wenn Sie einen zusätzlichen Frame codieren möchten, rufen Sie GoToNextFrameAsync auf. Dadurch werden die Daten im Container und im ersten Frame committen, sodass Sie sie nicht mehr bearbeiten können. An diesem Punkt wirken sich alle Aktionen, die Sie für den Encoder ausführen, auf den zweiten Frame aus. Nachdem Sie mit jedem Frame fertig sind, können Sie GoToNextFrameAsync aufrufen, um einen commit und einen neuen Frame anzufügen, oder FlushAsync aufrufen, um den Vorgang abzuschließen. Bitmap-Encoder können verschiedene Codierungsoptionen verfügbar machen, die sich auf die Qualität, Größe und andere Eigenschaften der codierten Ausgabedatei auswirken. Weitere Informationen finden Sie unter Imageerstellung.

Versionsverlauf

Windows-Version SDK-Version Mehrwert
1809 17763 HeifEncoderId

Eigenschaften

BitmapContainerProperties

Die Metadaten für den Container.

BitmapProperties

Die Metadaten für den ausgewählten Frame.

BitmapTransform

Ein BitmapTransform-Objekt , das verwendet wird, um anzugeben, wie die Framebit transformiert werden soll.

BmpEncoderId

Der eindeutige Bezeichner des integrierten BMP-Encoders.

EncoderInformation

Informationen zum Bitmapencoder.

GeneratedThumbnailHeight

Die Höhe einer generierten Miniaturansicht in Pixel.

GeneratedThumbnailWidth

Die Breite einer generierten Miniaturansicht in Pixel.

GifEncoderId

Der eindeutige Bezeichner des integrierten GIF-Encoders.

HeifEncoderId

Der eindeutige Bezeichner des integrierten HEIF-Encoders.

IsThumbnailGenerated

Gibt an, ob automatisch eine neue Miniaturansicht generiert wird.

JpegEncoderId

Der eindeutige Bezeichner des integrierten JPEG-Encoders.

JpegXREncoderId

Der eindeutige Bezeichner des integrierten JPEG-XR-Encoders.

PngEncoderId

Der eindeutige Bezeichner des integrierten PNG-Encoders.

TiffEncoderId

Der eindeutige Bezeichner des integrierten TIFF-Encoders.

Methoden

CreateAsync(Guid, IRandomAccessStream)

Erstellt asynchron einen neuen BitmapEncoder.

CreateAsync(Guid, IRandomAccessStream, IIterable<KeyValuePair<String,BitmapTypedValue>>)

Erstellt asynchron einen neuen BitmapEncoder für den angegebenen Codec mit den angegebenen Codierungsoptionen und initialisiert ihn in einem Stream.

CreateForInPlacePropertyEncodingAsync(BitmapDecoder)

Erstellt asynchron einen neuen BitmapEncoder für die direkte Bearbeitung von Eigenschaften und Metadaten. Der neue Encoder kann Bitmapeigenschaften nur vor Ort bearbeiten und schlägt bei anderen Verwendungen fehl.

CreateForTranscodingAsync(IRandomAccessStream, BitmapDecoder)

Erstellt asynchron einen neuen BitmapEncoder und initialisiert es mithilfe von Daten aus einem vorhandenen BitmapDecoder.

FlushAsync()

Führt einen asynchronen Commit aus und leert alle Bilddaten.

GetEncoderInformationEnumerator()

Eine Liste der auf dem System installierten Bitmapencoder und Informationen zu ihnen.

GoToNextFrameAsync()

Committ die aktuellen Framedaten asynchron und fügt einen neuen leeren Frame an, der bearbeitet werden soll.

GoToNextFrameAsync(IIterable<KeyValuePair<String,BitmapTypedValue>>)

Committ die aktuellen Framedaten asynchron und fügt einen neuen leeren Frame mit den angegebenen Codierungsoptionen an, die bearbeitet werden sollen.

SetPixelData(BitmapPixelFormat, BitmapAlphaMode, UInt32, UInt32, Double, Double, Byte[])

Legt Pixeldaten für den Frame fest.

SetSoftwareBitmap(SoftwareBitmap)

Legt die Bilddaten des aktuellen Frames mithilfe der angegebenen SoftwareBitmap fest.

Gilt für:

Weitere Informationen