我们发现了一些TIFF图像是6型OJPEG压缩的,其中许多具有相同的BitsPerSample值“8 8 8”,并且可以正常工作。
然而,偶尔会看到一些BitsPerSample值为“8 25608 0”的图像。我想知道这是否可能,如果不是,那么它是否是生成TIFF文件的系统中的错误。如果是,他们能否通过简单地修改标签使BitsPerSample变为“8 8 8”来修复呢?
目前,我只找到了一个工具(LEAD)可以通过将它们转换为未压缩的TIFF格式来处理它们,但我不知道它是如何处理的,而且这仅仅是为了解决少数图像的问题所需要的大量开销。
有没有人遇到过这个问题或者对于解决这个问题比我更有经验的人呢?到目前为止,我在Libtiff.net代码中探索的尝试并没有取得太大的成果!
谢谢!
更新:使用Libtiff.net时,只需使用以下内容:
然而,偶尔会看到一些BitsPerSample值为“8 25608 0”的图像。我想知道这是否可能,如果不是,那么它是否是生成TIFF文件的系统中的错误。如果是,他们能否通过简单地修改标签使BitsPerSample变为“8 8 8”来修复呢?
目前,我只找到了一个工具(LEAD)可以通过将它们转换为未压缩的TIFF格式来处理它们,但我不知道它是如何处理的,而且这仅仅是为了解决少数图像的问题所需要的大量开销。
有没有人遇到过这个问题或者对于解决这个问题比我更有经验的人呢?到目前为止,我在Libtiff.net代码中探索的尝试并没有取得太大的成果!
谢谢!
更新:使用Libtiff.net时,只需使用以下内容:
static void Main(string[] args)
{
using (Tiff image = Tiff.Open(args[0], "r"))
{
FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH);
int width = value[0].ToInt();
Console.WriteLine(string.Format("Width = {0}", width));
}
}
以下是结果(显然跳过了异常处理!):
ReadDirectory:警告,10.TIF:遇到未知的33000(0x80e8)标记字段 10.TIF:无法处理字段“BitsPerSample”的不同每样本值
未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。 在C:\ tiffstuff \ tifftest \ tifftest \ Program.cs的tifftest.Program.Main(String [] args)中:第15行 分段错误
我现在让它绕过检查并假设“BitsPerSample”为8,但现在我正在尝试使用bitmiracle网站上的示例提取图像以保存为BMP:
using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb))
{
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte[] bits = new byte[bmpdata.Stride * bmpdata.Height];
for (int y = 0; y < bmp.Height; y++)
{
int rasterOffset = y * bmp.Width;
int bitsOffset = (bmp.Height - y - 1) * bmpdata.Stride;
for (int x = 0; x < bmp.Width; x++)
{
int rgba = raster[rasterOffset++];
bits[bitsOffset++] = (byte)((rgba >> 16) & 0xff);
bits[bitsOffset++] = (byte)((rgba >> 8) & 0xff);
bits[bitsOffset++] = (byte)(rgba & 0xff);
}
}
System.Runtime.InteropServices.Marshal.Copy(bits, 0, bmpdata.Scan0, bits.Length);
bmp.UnlockBits(bmpdata);
bmp.Save("c:\\tiffstuff\\TiffTo24BitBitmap.bmp");
}
我很明显看到了OJPEG警告,随后出现了以下内容:OJPEGReadHeaderInfoSecTablesQTable: Missing JPEG tables
结果图像只是100%的绿色。
在修复这个问题方面,我是否已经超出了自己的能力范围?我知道JPEG图片在其中,但似乎无法成功地获取并解压缩它 :-(