如何在ushort数组中读取图像的像素数据并将此ushort数组导出为c#中的二进制文件

时间:2018-11-28 10:42:17

标签: c#

我有一个Tiff图像,它是一个16位图像,现在我想将像素数据读取为ushort数组,并将其存储为文本格式的二进制文件。

我有示例代码。

// Load file meta data with FileInfo
        FileInfo fileInfo = new FileInfo(path + "output.tif");

            // The byte[] to save the data in
            byte[] data = new byte[fileInfo.Length];
            // Load a filestream and put its content into the byte[]
            using (FileStream fs = fileInfo.OpenRead())
            {
                fs.Read(data, 0, data.Length);
            }

          ushort[] result = Array.ConvertAll(data, b => (ushort)b);

但是它正在读取元数据,我想读取像素数据。

2 个答案:

答案 0 :(得分:0)

您绝对应该使用外部库来处理tiff文件。这是一种复杂的文件格式,可以包含多个图像,可以压缩图像等。因此,仅读取字节数组绝对不会帮助您获取像素值。即使它仅包含像素的颜色值,您仍然必须将每两个字节合并为一个16位图像。

在示例代码中,您只是将字节转换为ushorts,这意味着您在数字之前加零,这不会更改值。

答案 1 :(得分:0)

首先,图像已经是二进制文件。

在这里,我不明白将图像显式转换为ushort数组的目的。除此之外,您只需将Tiff图片的所有字节保存到这样的文本文件中即可:

File.WriteAllBytes(@"Text file path", File.ReadAllBytes(@"Tiff image file path"));

然后从二进制文件中读取它,您只需从保存的文本文件中读取所有字节,然后使用MemoryStream并将其保存回图像。

using (Image image = Image.FromStream(new MemoryStream(File.ReadAllBytes(@"Text file path"))))
{
    image.Save(@"Path to save image", ImageFormat.Tiff);
}