Backgroudworker und XPS zu Bitmap

  • VB.NET
  • .NET (FX) 4.5–4.8

    Backgroudworker und XPS zu Bitmap

    Moin,

    ich wandle in einer Funktion ein XPS-Dokument in eine Grafik um:

    VB.NET-Quellcode

    1. Private Function xpsToImage(XPSpath As String) As Byte()
    2. Dim xps As New System.Windows.Xps.Packaging.XpsDocument(XPSpath, System.IO.FileAccess.Read)
    3. Dim sequence As FixedDocumentSequence = xps.GetFixedDocumentSequence()
    4. Dim page As DocumentPage = sequence.DocumentPaginator.GetPage(0)
    5. Dim qualityFactor As UShort = 3
    6. Dim toBitmap As New RenderTargetBitmap(CInt(page.Size.Width * qualityFactor), CInt(page.Size.Height * qualityFactor), 100 * qualityFactor, 100 * qualityFactor, System.Windows.Media.PixelFormats.[Default])
    7. toBitmap.Render(page.Visual)
    8. Dim Encoder = New JpegBitmapEncoder With {
    9. .QualityLevel = 90
    10. }
    11. Encoder.Frames.Add(BitmapFrame.Create(toBitmap))
    12. Using stream As New MemoryStream
    13. Encoder.Save(stream)
    14. Return stream.ToArray()
    15. End Using
    16. End Function


    Diese Methode wird innerhalb eines Backgroud-Workers aufgerufen - zumindest ist dies der Plan. Denn ich erhalte zur Laufzeit die meldung, dass Dim xps As New System.Windows.Xps.Packaging.XpsDocument(XPSpath, System.IO.FileAccess.Read) nicht per MTA (Multi Threaded Appartment) aufgerufen werden kann, sondern nur per STA.

    Nun ist aber das Multi-Threading ein wichtiger Teil meiner Applikation. Seht ihr eine andere Möglichkeit, XPS Dokumente in JPG umzuwandeln (JPG brauche ich als Byte())?

    Danke euch!