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

私は問題の解決策を得ました。それが正しい方法かどうかはわかりませんが、それでもこの解決策は私にとってはうまくいっています。それが他の人を助けることを願っています。

解決策は、フロー ドキュメント内のすべてのイメージ タグを反復処理し、移植可能なリポジトリ フォルダーにイメージをコピーすることです。次に、そのリポジトリ フォルダーから画像を読み込んで、画像をリッチテキスト ボックスに表示します。

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 に答える