Извлечение изображений из RichTextBox
У меня есть приложение, где пользователи могут вставлять изображения в RichTextBox. Я хотел бы иметь возможность заменить все изображения в формате RTF на некоторый токен и сохранить изображения в отдельных файлах. Я вставлю изображения обратно в RTF позже.
Мне удалось заставить вставку работать, но в итоге прибегли к вставке их через буфер обмена (очень похоже на вставку изображения в RTF-документ в C#).
Проблема сейчас в том, как извлечь изображения.
Как программно выбрать изображение в RichTextBox?
Должен ли я вернуться в буфер обмена? Что-то вроде:
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);
Есть ли более элегантное решение, которое не требует прохождения через буфер обмена?
Спасибо за вашу помощь!
2 ответа
Картинка будет выглядеть так:
{\*\shppict {\pict \emfblip ..... }}{\nonshppict {\pict ....}}
или даже
{\pict ...}
Вы можете проверить RTF документа, содержащего изображение, и написать регулярное выражение для извлечения изображений (заменив их токенами). Другая замена регулярных выражений может восстановить изображения.
Этот RTF-конвертер можно использовать для извлечения изображений RichTextBox с использованием класса RtfVisualImageAdapter.
Проверьте примеры:
- RichTextBox: RtfWinForms (Windows Forms), RtfWindows (WPF)
- Обработка изображений: Rtf2Html