프로그래밍/C#

PNG 16bit grayscale 데이터 읽기

얼땅불땅 2022. 3. 15. 14:23

C#에서 16bit grayscale PNG 파일을 Bitmap.FromFile 또는 Image.FromFile로 읽을 시 32bit argb 4바이트로 변환되어 읽게 된다.

16bit gray 이미지를 얻기 위해서는 다음과 같이 처리한다.

 


 

Stream imageStreamSource = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);PngBitmapDecoder decoder = new PngBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapSource bitmapSource = decoder.Frames[0];
int stride = (int)bitmapSource.PixelWidth * (bitmapSource.Format.BitsPerPixel / 8);
byte[] data = new byte[(int)bitmapSource.PixelHeight * stride];


bitmapSource.CopyPixels(data, stride, 0);

PNG 파일을 FileStream으로 읽고 PngBitmapDecoder로 BitmapSource를 얻는다.

그후 CopyPixels로 raw데이터를 복사한다.