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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top