Как я могу преобразовать 16-битный массив ushort в изображение C # - PullRequest
0 голосов
/ 18 октября 2018

У меня есть 16-битный массив ushort со значениями в диапазоне от 0 до 65535, который я хочу преобразовать в изображение в градациях серого для сохранения.Я попытался записать значения в тип данных изображения, а затем преобразовать изображение в растровое изображение, но как только я поместил его в тип данных растрового изображения, оно преобразуется в 8-разрядные данные.

using (Image<Gray, ushort> DisplayImage2 = new Image<Gray, ushort>(Width, Height))
{
    int Counter = 0;
    for (int i = 0; i < Height; i++)
    {
        for (int j = 0; j < Width; j++)
        {
            DisplayImage.Data[i, j, 0] = ushortArray[Counter];
            Counter++;
        }
    }
    Bitmap bitt = new Bitmap(Width, Height, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);
    bitt = DisplayImage2.ToBitmap();
    bitt.Save(SaveDirectory, System.Drawing.Imaging.ImageFormat.Tiff);)
}

Как только изображение помещается в битовый бит, оно меняется на 8 бит, есть ли способ сделать это?Спасибо

1 Ответ

0 голосов
/ 18 октября 2018

Адаптация из связанного ответа о том, как сохранить Format16bppGrayScale растровое изображение в формате TIFF, но без предварительного создания фактического растрового изображения.Для этого требуются некоторые библиотеки .NET, которые вы обычно не можете добавлять в качестве ссылок, а именно PresentationCore и WindowsBase.

BitmapSource, необходимый для создания BitmapFrame, который может кодировать кодировщик TIFF, может быть создан непосредственно из массива., так:

var bitmapSrc = BitmapSource.Create(Width, Height, 96, 96,
                                    PixelFormats.Gray16, null, rawData, Width * 2);
TiffBitmapEncoder encoder = new TiffBitmapEncoder();
encoder.Compression = TiffCompressOption.Zip;
encoder.Frames.Add(BitmapFrame.Create(bitmapSrc));
encoder.Save(outputStream);

Когда я попробовал это, файл казался настоящим 16-битным изображением.

...