Извлечение изображений из RichTextBox

У меня есть приложение, где пользователи могут вставлять изображения в RichTextBox. Я хотел бы иметь возможность заменить все изображения в формате RTF на некоторый токен и сохранить изображения в отдельных файлах. Я вставлю изображения обратно в RTF позже.

Мне удалось заставить вставку работать, но в итоге прибегли к вставке их через буфер обмена (очень похоже на вставку изображения в RTF-документ в C#).

Проблема сейчас в том, как извлечь изображения.

  1. Как программно выбрать изображение в RichTextBox?

  2. Должен ли я вернуться в буфер обмена? Что-то вроде:

    IDataObject data = Clipboard.GetDataObject();
    Clipboard.Clear();
    
    _RichTextBox.Select(/* The image */);
    _RichTextBox.Copy();
    
    Image img = Clipboard.GetImage();
    img.Save("myImage.png", System.Drawing.Imaging.ImageFormat.Png);
    
    Clipboard.Clear();
    Clipboard.SetDataObject(data);
    
  3. Есть ли более элегантное решение, которое не требует прохождения через буфер обмена?

Спасибо за вашу помощь!

2 ответа

Решение

Картинка будет выглядеть так:

{\*\shppict {\pict \emfblip ..... }}{\nonshppict {\pict ....}}

или даже

{\pict ...}

Вы можете проверить RTF документа, содержащего изображение, и написать регулярное выражение для извлечения изображений (заменив их токенами). Другая замена регулярных выражений может восстановить изображения.

Этот RTF-конвертер можно использовать для извлечения изображений RichTextBox с использованием класса RtfVisualImageAdapter.

Проверьте примеры:

  • RichTextBox: RtfWinForms (Windows Forms), RtfWindows (WPF)
  • Обработка изображений: Rtf2Html
Другие вопросы по тегам