有人知道如何读取像素翻译(pixtiff 压缩)吗?

cha*_*ama 2 image file image-processing

我正在尝试读取一个 TIFF 文件,该文件有一个与之关联的 ANN 文件。这场争执不会向标准观众开放。当我打开二进制 ANN 文件时,我唯一能理解的就是它是使用 Pixel Translations Inc. 的软件以 PIXTIFF 格式创建的。

有谁知道如何手动或以编程方式查看此文件?有没有可以用作查看器的免费软件?

谢谢!

小智 5

为了充分披露,我是 Atalasoft 的员工。

由于这篇文章,我们有一家公司联系我们,我想帮助尽可能多的可能遇到同样问题的人。

该公司拥有内部识别为 PIXTIFF 的文件。存在的特定字符串是“Pixel Translations Inc.,PIXTIFF Version”和版本号。然而,这些文件在 tiff 标头之前有几百个字节,这使得它们无法在标准查看器中打开。

在寻找有效的 tiff 时,我确实找到了另一组文件,以供参考已经可以使用的 tiff 的相同 PIXTIFF 字符串。我不能说是否有人已经“修复”了它们,或者是否是非标准流程创建了这家公司的设置。

因此,如果您确实发现有这些 PIXTIFF 二进制文件,请先检查它们是否是有效的 tiff,然后再继续。制作一个副本,为其指定 .tif 扩展名,然后使用IrfanView之类的工具尝试打开它。

查看Tiff 标头规范:Tiff 文件以 II* (0x49 0x49 0x2A 0x00) 或 MM* (0x4D 0x4D 0x2A 0x00) 开头,然后是从文件开头到第一个图像目录的偏移量。(尽管根据我的经验,大端 MM 顺序很少见。)

可以通过删除 tiff 标头之前的所有数据来修复有问题的文件。相对于 tiff 标头的偏移量已经是正确的。

我提供了一个快速的 C# 示例,展示了我在本地执行此操作的方法。用您选择的语言来实现这一点应该非常简单。

注意:Stream.CopyTo 仅在 .Net 4.0 及更高版本中可用。这也只纠正了两个可能的标头之一,但它确实修复了手头的所有文件。

byte[] header = { 0x49, 0x49, 0x2A, 0x00 };
int found = 0;

string filename = @"fileToFix";

using (Stream fileToFix = File.OpenRead(filename))
{
    while (found < 4 && fileToFix.Position < fileToFix.Length)
    {
        if (header[found] == fileToFix.ReadByte())
            found++;
        else
            found = 0;
    }

    if (found != 4) //Didn't find a tiff.
        return;

    fileToFix.Seek(-4, SeekOrigin.Current); //We're already 4 bytes in the the header, go back.

    using (Stream fixedFile = File.OpenWrite(Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + ".fixed.tif"))) //Same directory, same name but ending in .fixed.tif.
        fileToFix.CopyTo(fixedFile);
}
Run Code Online (Sandbox Code Playgroud)