我正在寻找一种将图像嵌入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文件中嵌入图像或将图像存储为二进制文件。我到处搜索,没有运气。
有人可以帮我吗?
答案 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.
}
}
}
}