【问题标题】:How to read TIFF header File c#?如何读取 TIFF 头文件 c#?
【发布时间】:2012-01-30 22:12:57
【问题描述】:

我想知道如何读取二进制格式的文件。

例如,tiff 图像文件可能具有以下十六进制 0000 4949 002A 0000 的二进制格式。 如何在 c# 中获取这些值?

【问题讨论】:

  • byte[] buf = new byte[???]; File.Open("somefile").Read(buf,0,buf.Length);
  • 我试过这个 sn-p 并且它有效
  • 仅供参考 - 这不是 TIFF 的正确标题格式。它可能是 49 49 2a 00(英特尔字节排序)或 4d 4d 00 2a(摩托罗拉字节排序),而不是您的问题。
  • 我知道,所以我需要阅读二进制格式,以便了解订购信息。

标签: c# header tiff


【解决方案1】:

这是我通常如何读取十六进制格式的文件,根据需要更改标题:

using System;
using System.Linq;
using System.IO;

namespace FileToHex
{
    class Program
    {
        static void Main(string[] args)
        {
            //read only 4 bytes from the file

            const int HEADER_SIZE = 4;

            byte[] bytesFile = new byte[HEADER_SIZE];

            using (FileStream fs = File.OpenRead(@"C:\temp\FileToHex\ex.tiff"))
            {
                fs.Read(bytesFile, 0, HEADER_SIZE);
                fs.Close();
            }

            string hex = BitConverter.ToString(bytesFile);

            string[] header = hex.Split(new Char[] { '-' }).ToArray();

            Console.WriteLine(System.String.Join("", header));

            Console.ReadLine();

        }
    }
}

【讨论】:

  • System.IO.File.ReadAllBytes() 函数读取整个文件。我正在寻找一种读取有限字节数的方法。
  • string str = bytesFile.Aggregate("",(s,b)=>s+=b.ToString("X2"));
【解决方案2】:

您可以使用 System.IO.File 类的 ReadAllBytes 方法将字节读入数组:

System.IO.FileStream fs = new System.IO.FileStream(@"C:\Temp\sample.pdf", System.IO.FileMode.Open, System.IO.FileAccess.Read);
int size = 1024;
byte[] b = new byte[size];
fs.Read(b, 0, size);

【讨论】:

  • 如果文件很大(例如超过 300 兆字节)怎么办。有没有办法限制要读取的字节数?
  • System.IO.File.ReadAllBytes() 函数读取整个文件。我正在寻找一种读取有限字节数的方法。
【解决方案3】:

我没有使用过 LibTIFF.Net,http://bitmiracle.com/libtiff,但它似乎相当完整。

使用它,而不是将文件作为字节读取,然后对标头进行解码,对您来说可能会容易得多。

【讨论】:

  • 我现在正在使用 LibTIFF.Net,但我找不到任何可以在 TIFF 头文件中显示“字节顺序”的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多