Ich habe einen einfachen Bildbetrachter in .NET gebaut und haben die Anforderung, Multi-Frame-TIFF-Bilder im Browser anzuzeigen. Zur Zeit habe ich ein (ashx) Handler-Setup, um JPEGs zu streamen, die sich in derselben Datenbank wie die Multi-Frame-TIFFs befinden, und es ist erwähnenswert, dass dieser Handler auch den ersten Frame der TIFF-Datei in ihrem aktuellen Zustand zurückgibt . In dem VB.NET-Code unten (Teil des Handlers) kann ich feststellen, ob eine TIFF-Datei mehrere Frames hat und ich habe versucht, die Frames zusammenzufügen, hatte aber noch keinen Erfolg. Hat jemand Multi-Frame-TIFFs mit einem ähnlichen Ansatz zurückgegeben? Hinweis: Ich habe die How to open a multi-frame TIFF image als Referenz bei der Entwicklung des folgenden Codes verwendet. HierStream (und konvertieren?) Mehrseitige TIFF mit ASP.NET
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
ist der Code für die GetPhoto Funktion:
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
Ist es möglich, jeden Rahmen eines Multi-Frame-TIFF in einem zusammenhängenden Bild zu platzieren und es zurück an den Browser schicken? Sollte ich meine Energie darauf konzentrieren, das Mehrfachrahmen-TIFF in ein anderes Format wie PDF zu konvertieren? Ich habe im Grunde kein Budget für den Kauf von Conversion-Paketen ... Jede Hilfe oder Beratung wäre sehr willkommen!