Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I embed an Image into a RichTextBox?

Tags:

c#

wpf

I am looking for a way to embed image to Rich text box. My rtf file is portable which contains both image and text. i.e. It can be moved from one computer to another. So the user should be able to see the content of rtf file (text+image) even if its in another machine.

Now I am using the following code to insert image.

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;
    }
}

But this code is not suitable for my purpose. Because the embedded image may not be in the other machine. So it won't work. Either I need to embed image or store image as binary in rtf file. I searched everywhere and no luck.

Can anyone help me please?

like image 258
Matt Avatar asked Nov 27 '25 13:11

Matt


1 Answers

I got a solution for the problem. I am not sure its the right way, but still this solution is working for me. Hope it may help others.

The solution is to iterate through all image tags in flow document and copy the images to a repository folder which is portable. Then load the images from that repository folder next time to show the images back in to 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.
                        }
                    }
                }
            }
like image 163
Matt Avatar answered Nov 29 '25 02:11

Matt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!