2016-05-27 4 views
0

Я создаю изображения на лету, используя следующий код:XamlWriter и XamlReader с потоковыми изображениями?

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

Я нашел уродливое решение, вместо использования image.StreamSource = stream Я пишу их во временный файл и устанавливаю BaseUri и UriSource в расположение файла.

Это означает, что я должен удалить файлы, когда закончите с ними, поэтому, если есть лучшее решение, которое меня интересует!