从.IMG文件中读取两个.TIF文件

时间:2016-05-11 15:23:24

标签: vb.net binaryreader

处理从.IMG文件解析.TIF图像(用于检查的前后图像)的一些遗留代码。例如,我有以下文件:05090001.IMG,然后我有关于该文件的以下值:

FrontStart:8 | FrontLength:10600 | RearStart:10608 | RearLength:6372

05090001.IMG的大小是16980字节,所以看起来前面的图像应该是10600字节并且实际上创建了一个有效的.TIF文件,而后面的图像总是最终损坏。

这是检索前面.TIF文件的现有代码:

Dim fs As New FileStream(Me.FileName, FileMode.Open, FileAccess.Read)
Dim sr As New BinaryReader(fs)
Dim fname As String = {long formula to generate fname}

Dim fsFront As New FileStream(fname & "_Front.tif", FileMode.Create)
Dim swFront As New BinaryWriter(fsFront)
Dim imgBytesFront As Byte()

fs = New FileStream(Path.Combine(DownImageFiles, dr("ImgFile")), FileMode.Open, FileAccess.Read)
sr = New BinaryReader(fs)
imgBytesFront = sr.ReadBytes(dr("FrontLength"))

swFront.Write(imgBytesFront)
swFront.Close()
fsFront.Close()

我试图添加类似的代码来访问后方图像文件:

Dim fsRear As New FileStream(fname & "_Rear.tif", FileMode.Create)
Dim swRear As New BinaryWriter(fsRear)
Dim imgBytesRear As Byte()

fs = New FileStream(Path.Combine(DownImageFiles, dr("ImgFile")), FileMode.Open, FileAccess.Read)
Using br As New BinaryReader(fs)
    br.BaseStream.Seek(Long.Parse(dr("FrontLength"), Globalization.NumberStyles.Integer), SeekOrigin.Begin)
    imgBytesRear = br.ReadBytes(dr("RearLength"))
End Using

imgBytesRear = sr.ReadBytes(dr("RearLength"))
swRear.Write(imgBytesRear)
swRear.Close()
fsRear.Close()

这会生成一张图片,但Windows表示它已经损坏,损坏或太大了#34;

我缺少什么想法?我正在使用Seek方法吗?我是否以某种方式再次读取前6372个字节,而不是跳过第一个10600并从那里开始?任何帮助非常感谢!

1 个答案:

答案 0 :(得分:1)

感谢上面评论中的几个人,我发现只需将.IMG文件作为System.Drawing.Image加载,我就可以将其拆分为单独的页面文件。

Dim tiffCheck As Image = Image.FromFile(Path.Combine(DownImageFiles, dr("ImgFile")))

之后,我基本上遵循了Split()函数下的解决方案: https://code.msdn.microsoft.com/windowsdesktop/Split-multi-page-tiff-file-058050cc

相关问题