Есть zip файл, в котором хранится FlowDocument (Card.xaml) и папка с изображениями (Media). Картинки в FlowDocument имеют Tag, в котором хранят свой путь относительно FlowDocument. Для поиска изображений (FindImages метод): Поиск изображений в FlowDocument
Как я открываю этот zip в RichTextBox:
string nameOfXamlCardDefault = "Card.xaml";
private void Open_Executed(object sender, ExecutedRoutedEventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == true)
{
//Открываем zip файл
using (FileStream fullCardZipFile = File.Open(dlg.FileName, FileMode.Open, FileAccess.ReadWrite))
{
//Смотрим zip c ZipArchive
using (ZipArchive archive = new ZipArchive(fullCardZipFile, ZipArchiveMode.Update))
{
//Получаем entry для нашего xaml (FlowDocument)
ZipArchiveEntry xamlFileEntry = archive.GetEntry(nameOfXamlCardDefault);
//Открываем xaml
using (Stream xamlFileStreamInZip = xamlFileEntry.Open())
{
//Загружаем FlowDocument в rtbEditor.Document
rtbEditor.Document = XamlReader.Load(xamlFileStreamInZip) as FlowDocument;
//Ищем картинки
List<Image> images = FindImages(rtbEditor.Document).ToList();
foreach (var image in images)
{
var imageFileEntry = archive.GetEntry(image.Tag.ToString());
var bitmap = new BitmapImage();
using (Stream imageFileStream = imageFileEntry.Open())
{
var memoryStream = new MemoryStream();
imageFileStream.CopyTo(memoryStream);
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = memoryStream;
bitmap.EndInit();
image.Source = bitmap;
}
}
}
}
}
}
return;
}
Все изображения в RichTextBox отображаются, только в BitmapImage нет StreamSource. И потом это приведет к ошибке.
<FlowDocument xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" NumberSubstitution.CultureSource="User" AllowDrop="True" PagePadding="5,0,5,0">
<Paragraph>
<Image Tag="Media/image0.png">
<Image.Source>
<BitmapImage CacheOption="OnLoad" BaseUri="{x:Null}"/>
</Image.Source>
</Image>
<Image Tag="Media/image1.png">
<Image.Source>
<BitmapImage CacheOption="OnLoad" BaseUri="{x:Null}"/>
</Image.Source>
</Image>
</Paragraph>
Но, если например просто копировать изображение и вставлять в RichTextBox, то это выглядит так и с таким работать можно:
<Image Height="400" Width="600">
<Image.Source>
<BitmapImage CacheOption="OnLoad" UriSource="./Image1.bmp"
BaseUri="pack://payload:,,wpf1,/Xaml/Document.xaml"/>
</Image.Source>
</Image>
Возможно ли как-то изображения из zip приводить к такому виду (как при обычном копировании)? Я пытался работать с MemoryStream, делать Freeze(). Также пытался изображения в Clipboard совать и потом их вставлять. Но ни к чему полезному не привело.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть код, который переводит все в двоичный кодТеперь мне нужно задать числу 1 - черный цвет, а 0 - белый цвет