다음을 통해 공유


픽셀 데이터를 특정 형식으로 가져오는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

여기서는 BitmapDecoder 개체를 사용하여 이미지에서 픽셀 데이터를 가져오는 방법을 보여 줍니다. 픽셀은 바이트 배열로 패키지되며 형식은 데이터를 요청할 때 지정할 수 있습니다.

BitmapDecoder가 만들어내는 픽셀 데이터의 다음 특성을 지정할 수 있습니다.

  1. 픽셀 형식(BitmapPixelFormat)
  2. 알파 모드(BitmapAlphaMode)
  3. 대칭 이동, 회전, 크기 조정 및/또는 자르기 작업(BitmapTransform)
  4. 포함된 EXIF 방향 플래그를 준수할지 여부(ExifOrientationMode)
  5. sRGB 색 공간에 대해 색 관리를 수행할지 여부(ColorManagementMode)

디코딩 동작에 대한 미세 조정이 필요하거나 앱에서 특정 형식의 픽셀 데이터를 기대하는 경우 유용합니다. 예를 들어 HTML Canvas Context2D API와 상호 작용하는 경우 픽셀 데이터를 Rgba8 및 스트레이트 알파로 제공해야 합니다.

알아야 할 사항

기술

사전 요구 사항

지침

단계 1: 디코더 개체 가져오기

BitmapDecoder 개체를 수신하는 함수를 작성합니다.

function GetPixelData(decoder) {

디코더를 사용하면 픽셀 데이터에 액세스할 수 있습니다. 디코더 개체가 없는 경우 이미지를 디코드하는 방법을 참조하세요.

단계 2: 픽셀 데이터 공급자 개체 가져오기

getPixelDataAsync 메서드를 호출하고 매개 변수를 지정하여 반환된 픽셀 데이터의 형식을 제어합니다. 픽셀 데이터 공급자에는 지정하는 형식의 픽셀 데이터가 포함됩니다. getPixelDataAsync가 반환되면 픽셀 데이터가 할당되고 사용 준비가 된 것입니다.

decoder.getPixelDataAsync(
        Windows.Graphics.Imaging.BitmapPixelFormat.rgba8,
        Windows.Graphics.Imaging.BitmapAlphaMode.straight,
        new Windows.Graphics.Imaging.BitmapTransform(),
        Windows.Graphics.Imaging.ExifOrientationMode.respectExifOrientation,
        Windows.Graphics.Imaging.ColorManagementMode.colorManageToSRgb
    ).then(function (pixelDataProvider) {

이 경우 픽셀 형식은 RGBA8로 설정되어 있으며 알파 모드는 직선으로 설정되어 있습니다. 픽셀 데이터가 반환될 경우 처리 코드는 이 가정을 기반으로 하여 작동합니다. EXIF 방향 준수를 제외하고는 변형이 적용되지 않으며 색 관리가 사용됩니다.

참고  인수 없이 getPixelDataAsync를 호출할 수 있으며 이 메서드는 픽셀 데이터를 원래 형식으로 반환합니다. 자세한 내용은 픽셀 데이터를 기본 형식으로 가져오는 방법을 참조하세요.

 

단계 3: 데이터 공급자에서 픽셀 가져오기

detachPixelData 메서드를 호출하여 픽셀 데이터의 바이트 배열을 가져옵니다.

      var pixels = pixelDataProvider.detachPixelData()

detachPixelData 함수는 픽셀 데이터의 바이트 배열을 동기적으로 반환합니다. 이 예제에서는 픽셀 데이터를 Rgba8 픽셀 형식으로 요청하므로 배열에 있는 각 요소는 단일 색 채널 값에 해당합니다.

참고  detachPixelData는 한 번만 호출할 수 있습니다. 그 다음에 오는 모든 호출은 실패합니다. 픽셀을 다시 가져오려면 getPixelDataAsync를 호출하여 새 픽셀 데이터 공급자를 가져와야 합니다.

 

단계 4: 픽셀 반복

픽셀 데이터가 준비되었으면 처리합니다. 다음 코드에서는 녹색 및 파란색 채널을 종료하고 빨간색 및 알파 채널은 남겨 놓습니다.

        var height = decoder.orientedPixelHeight;
        var width = decoder.orientedPixelWidth;

        for (var i = 0; i < height; i++) {
            for (var j = 0; j < width; j++) {
                pixels[(i * height + j) * 4 + 1] = 0; // Green channel (RGBA)
                pixels[(i * height + j) * 4 + 2] = 0; // Blue channel (RGBA)
            }
        }
    });
}

참고  2단계에서, getPixelDataAsync에 대한 호출이, 디코더가 EXIF 방향이 적용된 픽셀 데이터를 반환하도록 지정했습니다. 그러므로 이미지 크기를 가져오려 할 때에는 pixelWidthpixelHeight 대신 orientedPixelWidthorientedPixelHeight 속성을 사용해야 합니다. orientedPixelWidthorientedPixelHeight 속성은 EXIF 방향으로 인한 모든 변경 사항을 크기에 반영합니다.

 

관련 항목

Windows.Graphics.Imaging

BitmapDecoder

GetPixelDataAsync

이미지를 디코드하는 방법

픽셀 데이터를 특정 형식으로 가져오는 방법