Bagikan melalui


BitmapEncoder Kelas

Definisi

Berisi metode untuk membuat, mengedit, dan menyimpan gambar.

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
Warisan
Object Platform::Object IInspectable BitmapEncoder
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)

Contoh

Berikut adalah contoh parsial untuk membuat objek encoder. Contoh ini mengasumsikan Anda memilih file dengan Windows.Storage.Pickers.FileSavePicker. Untuk instruksi lengkap tentang memilih file, membuat encoder, dan mengodekan gambar, lihat Pencitraan

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


    }
}

Keterangan

Format gambar

BitmapEncoder dapat mengodekan format berikut.

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

Untuk daftar format pendekodean, lihat topik BitmapDecoder .

BitmapEncoder berperilaku berbeda dari BitmapDecoder karena tidak menyediakan akses acak ke bingkai dalam gambar. Sebagai gantinya, Anda perlu melakukan tindakan pada encoder dalam urutan tertentu.

Saat Anda membuat BitmapEncoder, BitmapEncoder menyediakan akses ke data pada kontainer dan bingkai pertama. Ketika Anda selesai mengatur data pada bingkai dan kontainer pertama, jika Anda tidak ingin mengodekan bingkai tambahan apa pun, maka panggil FlushAsync untuk menyelesaikan operasi pengodean.

Jika Anda ingin mengodekan bingkai tambahan, panggil GoToNextFrameAsync. Ini menerapkan data dalam kontainer dan bingkai pertama sehingga Anda tidak dapat mengeditnya lagi. Pada titik ini, tindakan apa pun yang Anda lakukan pada encoder akan memengaruhi bingkai kedua. Setelah selesai dengan setiap bingkai, Anda dapat memanggil GoToNextFrameAsync untuk menerapkan dan menambahkan bingkai baru, atau memanggil FlushAsync untuk menyelesaikannya. Encoder bitmap dapat mengekspos berbagai opsi pengodean yang memengaruhi kualitas, ukuran, dan properti lain dari file output yang dikodekan. Untuk informasi selengkapnya, lihat Pencitraan.

Riwayat versi

Versi Windows Versi SDK Nilai ditambahkan
1809 17763 HeifEncoderId

Properti

BitmapContainerProperties

Metadata untuk kontainer.

BitmapProperties

Metadata untuk bingkai yang dipilih.

BitmapTransform

Objek BitmapTransform yang digunakan untuk menentukan bagaimana bitmap bingkai akan diubah.

BmpEncoderId

Pengidentifikasi unik encoder BMP bawaan.

EncoderInformation

Informasi tentang encoder bitmap.

GeneratedThumbnailHeight

Tinggi, dalam piksel, dari gambar mini yang dihasilkan.

GeneratedThumbnailWidth

Lebar, dalam piksel, dari gambar mini yang dihasilkan.

GifEncoderId

Pengidentifikasi unik encoder GIF bawaan.

HeifEncoderId

Pengidentifikasi unik dari encoder HEIF bawaan.

IsThumbnailGenerated

Menunjukkan apakah gambar mini baru dibuat secara otomatis atau tidak.

JpegEncoderId

Pengidentifikasi unik encoder JPEG bawaan.

JpegXREncoderId

Pengidentifikasi unik encoder JPEG-XR bawaan.

PngEncoderId

Pengidentifikasi unik encoder PNG bawaan.

TiffEncoderId

Pengidentifikasi unik dari encoder TIFF bawaan.

Metode

CreateAsync(Guid, IRandomAccessStream)

Secara asinkron membuat BitmapEncoder baru.

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

Secara asinkron membuat BitmapEncoder baru untuk codec yang ditentukan dengan opsi pengodean yang ditentukan dan menginisialisasinya pada aliran.

CreateForInPlacePropertyEncodingAsync(BitmapDecoder)

Secara asinkron membuat BitmapEncoder baru untuk pengeditan properti dan metadata di tempat. Encoder baru hanya dapat mengedit properti bitmap di tempat dan akan gagal untuk penggunaan lain.

CreateForTranscodingAsync(IRandomAccessStream, BitmapDecoder)

Secara asinkron membuat BitmapEncoder baru dan menginisialisasinya menggunakan data dari BitmapDecoder yang ada.

FlushAsync()

Secara asinkron melakukan dan menghapus semua data gambar.

GetEncoderInformationEnumerator()

Daftar encoder bitmap yang diinstal pada sistem dan informasi tentang mereka.

GoToNextFrameAsync()

Secara asinkron menerapkan data bingkai saat ini dan menambahkan bingkai kosong baru untuk diedit.

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

Secara asinkron menerapkan data bingkai saat ini dan menambahkan bingkai kosong baru, dengan opsi pengodean yang ditentukan, untuk diedit.

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

Mengatur data piksel pada bingkai.

SetSoftwareBitmap(SoftwareBitmap)

Mengatur data gambar bingkai saat ini menggunakan SoftwareBitmap yang ditentukan.

Berlaku untuk

Lihat juga