如何将图像嵌入RichTextBox?

时间:2012-06-18 17:24:02

标签: c# wpf

我正在寻找一种将图像嵌入Rich文本框的方法。我的rtf文件是可移植的,包含图像和文本。即它可以从一台计算机移动到另一台计算机。因此用户应该能够看到rtf文件(文本+图像)的内容,即使它在另一台机器中也是如此。

现在我使用以下代码插入图片。

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文件中嵌入图像或将图像存储为二进制文件。我到处搜索,没有运气。

有人可以帮我吗?

1 个答案:

答案 0 :(得分: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.
                        }
                    }
                }
            }