3

我正在寻找一种将图像嵌入富文本框的方法。我的 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 文件中嵌入图像或将图像存储为二进制文件。我到处搜索,没有运气。

任何人都可以帮助我吗?

4

1 回答 1

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.
                        }
                    }
                }
            }
于 2012-06-26T04:32:36.323 回答