我有一个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);
但是它正在读取元数据,我想读取像素数据。
答案 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);
}