2012-06-18 59 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是多余的 – 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. 
         } 
        } 
       } 
      } 
相关问题