2012-06-18 107 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. 
         } 
        } 
       } 
      } 
相關問題