Wpf 来自图像中FlowDocument呈现错误的XPS

Wpf 来自图像中FlowDocument呈现错误的XPS,wpf,vb.net,xps,Wpf,Vb.net,Xps,这将是一个更长的职位 球门 从FlowDocument呈现XPS文档,同时保留原始图像,无需转换 现有场景 正确添加的图像保留格式,但仅保留第一个图像。然后,缓存被破坏,XPS中只嵌入一个映像,并用于所有映像 所有图像都已添加并正确,但已转换为PNG 根据方法GetImage see comments中单行的注释/取消注释,会出现差异 最小展示/问题代码 Imports System.Windows.Documents Imports System.Windows.Documents.Seria

这将是一个更长的职位

球门 从FlowDocument呈现XPS文档,同时保留原始图像,无需转换

现有场景 正确添加的图像保留格式,但仅保留第一个图像。然后,缓存被破坏,XPS中只嵌入一个映像,并用于所有映像

所有图像都已添加并正确,但已转换为PNG

根据方法GetImage see comments中单行的注释/取消注释,会出现差异

最小展示/问题代码

Imports System.Windows.Documents
Imports System.Windows.Documents.Serialization
Imports System.Windows.Xps.Packaging
Imports System.Windows.Xps
Imports System.IO
Imports System.IO.Packaging
Imports System.Windows.Markup
Imports System.Windows.Media.Imaging
Imports System.Windows.Media
Imports System.Windows.Controls

Module Module1

    Sub Main()

        Render()

    End Sub

    Sub Render()

        Using image1 = IO.File.OpenRead("image1.jpg"),
            image2 = IO.File.OpenRead("image2.png"),
            file = IO.File.Create("asdf.xps"),
            pack = Package.Open(file, FileMode.Create),
            d As New XpsDocument(pack)


            Dim writer As XpsDocumentWriter = XpsDocument.CreateXpsDocumentWriter(d)
            Dim xpsVisWriter As SerializerWriterCollator = writer.CreateVisualsCollator()

            Dim x As New FlowDocument
            x.PageWidth = 100
            x.ColumnWidth = x.PageWidth

            Dim s As New Section
            DirectCast(x, IAddChild).AddChild(s)
            s.BreakPageBefore = True

            Dim p As New Paragraph()
            DirectCast(s, IAddChild).AddChild(p)

            Dim i As New Image
            DirectCast(p, IAddChild).AddChild(i)
            i.Source = GetImage(image1)

            Dim i2 As New Image
            DirectCast(p, IAddChild).AddChild(i2)
            i2.Source = GetImage(image2)

            Dim paginator = DirectCast(x, IDocumentPaginatorSource).DocumentPaginator
            Dim pageIndex As Integer = 0

            While Not paginator.IsPageCountValid OrElse paginator.PageCount > pageIndex
                Dim page As DocumentPage = paginator.GetPage(pageIndex)


                xpsVisWriter.Write(page.Visual)
                pageIndex += 1
            End While


            xpsVisWriter.EndBatchWrite()

        End Using

    End Sub

    Function GetImage(stream As Stream) As ImageSource

        Dim result As ImageSource = BitmapFrame.Create(
            stream,
            BitmapCreateOptions.PreservePixelFormat Or BitmapCreateOptions.IgnoreImageCache,
            BitmapCacheOption.None)

        'If this Line Runs, scenario 2 occures, otherwise scenario 1
        'result = BitmapFrame.Create(result)

        Return result

    End Function

End Module

我再也不知道该怎么办了。尝试了所有可能的缓存启用/禁用操作。

我没有使用任何visual basic,但在使用c时遇到了类似的问题。尝试在GetImage方法中返回BitmapImage而不是ImageSource