我在 .NET 中构建了一个简单的图像查看器,并且需要在浏览器中显示多帧 TIFF 图像。目前,我有一个(ashx)处理程序设置来流回与多帧 TIFF 混合在同一个数据库中的 JPEG,值得一提的是,该处理程序还将返回 TIFF 文件的第一帧在其当前状态. 在下面的 VB.NET 代码(处理程序的一部分)中,我能够确定 TIFF 文件是否有多个帧,我开始尝试将这些帧拼接在一起,但还没有成功。有没有人使用类似的方法返回多帧 TIFF?注意:我在开发下面的代码时使用了如何打开多帧 TIFF 图像作为参考。
context.Response.Cache.SetCacheability(HttpCacheability.NoCache)
context.Response.Cache.SetNoStore()
context.Response.Cache.SetExpires(DateTime.MinValue)
imageList = GetPhoto(picid)
If (imageList IsNot Nothing) Then
Dim img As Image
Dim prevImageHeight = 0
For Each img In imageList
Dim imgGraphics As Graphics = Graphics.FromImage(img)
imgGraphics.DrawImage(img, 0, prevImageHeight, img.Width, img.Height * imageList.Count)
prevImageHeight += img.Height
img.Save(context.Response.OutputStream, ImageFormat.Jpeg)
img.Dispose()
Next img
Else
' Return 404
context.Response.StatusCode = 404
context.Response.End()
End If
下面是 GetPhoto 函数的代码:
Public Function GetPhoto(ByVal id As String) As List(Of Image)
Dim db As New UtilDb
Dim imageLocation As String
Dim errMsg As String = ""
Dim imageList As New List(Of Image)
Dim returnImage As Bitmap = Nothing
imageLocation = GetFileName(id)
If (imageLocation IsNot Nothing) Then
Dim iFile As Image = Image.FromFile(imageLocation)
If (imageLocation.ToUpper.EndsWith("TIF")) Then
Dim frameCount As Integer = iFile.GetFrameCount(FrameDimension.Page)
Dim i As Integer
If (frameCount > 1) Then
For i = 0 To frameCount - 1
iFile.SelectActiveFrame(FrameDimension.Page, i)
returnImage = New Bitmap(iFile, iFile.Width * 0.4, iFile.Height * 0.4)
imageList.Add(returnImage)
Next i
Else
returnImage = New Bitmap(iFile, iFile.Width * 0.4, iFile.Height * 0.4)
imageList.Add(returnImage)
End If
Else
Dim scaledWidth As Integer = (iFile.Width / iFile.Height) * 480
returnImage = New Bitmap(iFile, scaledWidth, 480)
imageList.Add(returnImage)
End If
iFile.Dispose()
End If
Return imageList
End Function
是否可以将多帧 TIFF 的每一帧放在连续图像中并将其发送回浏览器?我是否应该集中精力将多帧 TIFF 转换为另一种格式,例如 PDF?我基本上没有购买转换包的预算......任何帮助或指导将不胜感激!