VB.net Speichern einer MetaFile / EMF als Bitmap (TIFF)
Frage
Zur Zeit habe ich eine dritte Partei Steuerelement, das eine Metafile erzeugt. Ich kann die .wmf-Datei auf der Festplatte mit herauser Ausgabe speichern. Das Problem ist, wie kann ich die Metafile als Tiff-Datei machen.
Zur Zeit habe ich den folgenden Code meine Metafile zu erhalten und speichern.
Dim mf As Metafile = page.GetImage(TXTextControl.Page.PageContent.All)
Dim enhMetafileHandle As IntPtr = mf.GetHenhmetafile()
Dim h As IntPtr
Dim bufferSize As UInteger = GetEnhMetaFileBits(enhMetafileHandle, 0, h)
Dim buffer(CInt(bufferSize)) As Byte
GetEnhMetaFileBits(enhMetafileHandle, bufferSize, buffer)
Dim msMetafileStream As New MemoryStream
msMetafileStream.Write(buffer, 0, CInt(bufferSize))
Dim baMetafileData() As Byte
baMetafileData = msMetafileStream.ToArray
Dim g As Graphics = Graphics.FromImage(mf)
mf.Dispose()
File.WriteAllBytes("c:\a.wmf", baMetafileData)
end sub
_ Öffentliche Geteilt Funktion GetEnhMetaFileBits (ByVal HemF Als System.IntPtr, ByVal nSize Als UInteger, ByVal lpData Als IntPtr) Als UInteger End Function
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll", EntryPoint:="GetEnhMetaFileBits")> _
Public Shared Function GetEnhMetaFileBits(<System.Runtime.InteropServices.InAttribute()> ByVal hEMF As System.IntPtr, ByVal nSize As UInteger, ByVal lpData() As Byte) As UInteger
End Function
Ich habe alle Arten von Bild- und Grafik Anrufe versucht und kann einfach nicht speichern Sie die Meta-Datei als Tiff. Irgendwelche Vorschläge wäre toll. Ich habe sogar versucht, eine neue Bitmap zu erstellen und die Metadatei auf mich zu ziehen. Ich am Ende immer mit einer GDI Ausnahme ausgelöst wird.
Lösung 2
Mein letzter Code wie folgt aussieht:
Dim NewGraphic As Graphics = Nothing
Dim BitonalImage As Bitmap = Nothing
Using bmp As New Bitmap(3264, 4224)
Try
NewGraphic = Graphics.FromImage(bmp)
NewGraphic.FillRectangle(New SolidBrush(Color.White), 0, 0, 3264, 4224)
NewGraphic.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
NewGraphic.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
NewGraphic.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
NewGraphic.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
NewGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
NewGraphic.DrawImage(MetaFileToConvert, 0, 0, 3264, 4224)
BitonalImage = CType(ConvertToBitonal(CType(bmp, Bitmap)), Bitmap)
BitonalImage.SetResolution(385, 385)
OutBMP = BitonalImage
Catch ex As Exception
Throw ex
Finally
NewGraphic.Dispose()
BitonalImage.Dispose()
End Try
End Using
Andere Tipps
Der Code ist schwer zu entziffern. die Metadatei in eine Bitmap einfach Zeichnung sollte den Job erledigen. Zum Beispiel:
Dim mf As Metafile = page.GetImage(TXTextControl.Page.PageContent.All)
Using bmp As New Bitmap(mf.Width, mf.Height)
Using gr As Graphics = Graphics.FromImage(bmp)
gr.DrawImage(mf, 0, 0)
End Using
bmp.Save("c:\temp\test.tiff", ImageFormat.Tiff)
End Using