我使用以下代码动态创建图像:
Public Function ToBitmapImage(byteArray As Byte()) As BitmapImage
Dim image As New BitmapImage()
Dim stream As New MemoryStream(byteArray)
image.BeginInit()
image.StreamSource = stream
image.EndInit()
image.Freeze()
Return image
End Function
然后我尝试使用以下代码克隆包含图像的其中一个对象:
Public Function Clone(Of T As DependencyObject)(orginal As T) As T
If (orginal Is Nothing) Then
Return Nothing
End If
Using stream As New MemoryStream()
XamlWriter.Save(orginal, stream)
stream.Position = 0
Return CType(XamlReader.Load(stream), T)
End Using
End Function
图像序列化为:
...xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"...
<av:Image ...>
<av:Image.Source>
<av:BitmapImage BaseUri="{x:Null}" />
</av:Image.Source>
</av:Image>
BaseUri="{x:Null}"
导致Initialization of 'System.Windows.Media.Imaging.BitmapImage' threw an exception. rownumber 1 row position xxx.
有没有办法强制它如此序列化BitmapImage中的数据而不是baseUrl?
答案 0 :(得分:0)
我找到了一个丑陋的解决方案,而不是使用image.StreamSource = stream
我将它们写入临时文件并将BaseUri
和UriSource
设置为文件位置。
这意味着我必须在完成这些文件时删除这些文件,所以如果有更好的解决方案,我感兴趣!