wpf gray16 시각화

현재 512*512 사이즈의 이미지를 wpf에 시각화하려고 합니다.

해당 이미지는 gray16이라 5125122 byte배열에 담겨있어요

Image.Source = BitmapSource.Create(rows, columns, 96, 96, PixelFormats.Gray16, null, Pixel[frameIndex], (columns * 16 + 7) / 8);

로는 출력이 되지 않는데 어떤 문제일까요? 구글에 gray16 시각화 예제가 없어 질문드립니다.
감사합니다.

2개의 좋아요

Displaying Raw Images Using WPF - CodeProject

1개의 좋아요

스택오버플로우 참고했습니다.

주요 코드는 다음과 같습니다.

bitmapSource.WritePixels(new Int32Rect(0, 0, width, height), pixels, width * 2, 0);

아래는 위 코드를 사용하여 Gray16 을 만드는 코드입니다.

public static BitmapSource MakeGray16()
{
    var width = 256;
    var height = 256;

    var bitmapSource = new WriteableBitmap(width, height, 96, 96, PixelFormats.Gray16, null);
    var pixels = new ushort[width * height];
    for (var y = 0; y < height; ++y)
        for (var x = 0; x < width; ++x)
        {
            var v = x * y;
            pixels[y * width + x] = (ushort)v;
        }

    bitmapSource.WritePixels(new Int32Rect(0, 0, width, height), pixels, width * 2, 0);

    return bitmapSource;
}
2개의 좋아요

우선 다들 답변 감사합니다.

일단 해당 문제는 해결했습니다.
제가 사용하는 이미지영상이 Dicom이라는 의료영상인데 고려해야할 것이 Bitstored이
8,12,16 bit이 있고 smallest, largest value가 있었습니다.

8bit의 경우 byte배열에 그대로 들어가고
12,16의 경우 byte배열에 하위8bit, 상위8bit로 나뉘어 들어갔습니다.

때문에 12,16은 0~12,16진수의 최대값을 0~255로 범위를 수정하여 다시 byte배열에 넣고
gray8로 시각화했습니다.

또한 smallest(보통 0 ), largest value가 tag로 있는경우 해당 값을 기준으로 0~255로 수정했습니다.

더 좋은 방법이 있다면 알려주시면 감사하겠습니다.

dicomImage.Source = BitmapSource.Create(columns, rows, 96, 96, PixelFormats.Gray8, null, image[frameIndex], (columns * 8 + 7) / 8);

저는 해당코드로 시각화했습니다.

2개의 좋아요