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๊ฐœ์˜ ์ข‹์•„์š”