2012-06-18 2 views
3

Я ищу способ вставки изображения в Rich текстовое поле. Мой файл rtf переносим, ​​который содержит как изображение, так и текст. т. е. его можно переместить с одного компьютера на другой. Таким образом, пользователь должен иметь возможность видеть содержимое файла rtf (текст + изображение), даже если оно находится на другом компьютере.Как вставить изображение в RichTextBox?

Для этого введите следующий код.

public static void ApplyImage(RichTextBox RichTextBoxControl) 
{ 
    try 
    { 
     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 
     dlg.DefaultExt = ".png"; 
     dlg.Filter = "PNG Files (.png)|*.png|JPG Files (.jpg)|*.jpg|GIF Files (.gif)|*.gif"; 
     Nullable<bool> result = dlg.ShowDialog(); 
     if (result == true) 
     { 
      string fileName = dlg.FileName; 
      if (File.Exists(fileName)) 
      { 
       BitmapImage bi = new BitmapImage(new Uri(fileName)); 
       Image image = new Image(); 
       image.Source = bi; 
       InlineUIContainer container = new InlineUIContainer(image); 
       Paragraph paragraph = new Paragraph(container); 
       RichTextBoxControl.Document.Blocks.Add(paragraph); 
      } 
     } 
    } 
    catch 
    { 
     throw; 
    } 
} 

Но этот код не подходит для моей цели. Поскольку встроенное изображение может быть не на другом компьютере. Так что это не сработает. Мне нужно встроить изображение или сохранить изображение как двоичное в файле rtf. Я искал везде и не повезло.

Может ли кто-нибудь мне помочь?

+0

nitpick: catch/throw is overlluous – flq

+0

Спасибо за информацию. Но мне нужно решение проблемы. Любая помощь? – Matt

+0

Кажется, никто не знает пути. Разве это невозможно? – Matt

ответ

2

У меня есть решение проблемы. Я не уверен, что это правильно, но все же это решение работает для меня. Надеюсь, это поможет другим.

Решение состоит в том, чтобы перебирать все теги изображений в документе потока и копировать изображения в папку репозитория, которая является переносной. Затем загрузите изображения из этой папки репозитория в следующий раз, чтобы отобразить изображения обратно в richtextbox.

foreach (Block block in rtb.Blocks) 
     { 
      if (block is Paragraph) 
      { 
       Paragraph paragraph = (Paragraph)block; 
       foreach (Inline inline in paragraph.Inlines) 
       { 
        if (inline is InlineUIContainer) 
        { 
         InlineUIContainer uiContainer = (InlineUIContainer)inline; 
         if (uiContainer.Child is Image) 
         { 
          Image image = (Image)uiContainer.Child; 
//Copy Image source to another repository folder and save the path. 
         } 
        } 
       } 
      } 
Смежные вопросы