다음을 통해 공유


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을 사용하여 현재 프레임의 이미지 데이터를 설정합니다.

적용 대상

추가 정보