Как получить изображение уже внутри RichEditBox в UWP

У меня есть RichEditBox в UWP с изображением, уже вставленным внутрь. Когда изображение было вставлено, ему были заданы определенная ширина и высота (в пикселях). Теперь, после того, как изображение было вставлено, я хотел бы выбрать изображение и отредактировать размеры. Есть ли способ добиться этого?

Также я видел похожую ветку с неправильным ответом. Пожалуйста, помните, что это для WINRT (UWP).

Как получить изображение из RichEditBox

1 ответ

Я хотел бы выбрать изображение и редактировать размеры

Во-первых, вам нужно получить выбранное изображение RTF текст из RichEditBox, Для этого вы должны использовать Selection собственностью ITextDocument.Например:

Richbox.Document.Selection.GetText(TextGetOptions.FormatRtf, out rtf); 

Во-вторых, после того, как вы получили изображение RTF текст, вам нужно написать конвертер для преобразования RTF изображать. Изображения в спецификации RTF начинаются с \pict управляющее слово, и может быть в шестнадцатеричном (по умолчанию) или двоичном формате. Изображение в шестнадцатеричном или двоичном формате следует за контрольными словами назначения изображения. Чтобы ваш конвертер мог следовать этому, чтобы использовать регулярное выражение для извлечения изображения.

Для этой темы, которую вы связали, хотя это не специально для приложения UWP, но в нем рассказывается, как извлечь Image из RTF, вы все равно можете сослаться на него. Я использую фрагмент кода @kmote с некоторыми изменениями для простого тестирования и могу работать. Тестируем фрагмент кода следующим образом:

string rtf = "";
Richbox.Document.Selection.GetText(TextGetOptions.FormatRtf, out rtf); 
string imageDataHex = "";
var r = new Regex(@"pict[\s\S]+?[\r\n](?<imagedata>[\s\S]+)[\r\n]\}\\par", RegexOptions.None);
var m = r.Match(rtf);
if (m.Success)
{
    imageDataHex = (m.Groups["imagedata"].Value;
}  
byte[] imageBuffer = ToBinary(imageDataHex);
StorageFile tempfile = await ApplicationData.Current.LocalFolder.CreateFileAsync("temppic.jpg");
await FileIO.WriteBufferAsync(tempfile, imageBuffer.AsBuffer());

Но все ответы только для руководства, вам может понадобиться написать свою собственную безупречную библиотеку. Существует сторонний пакет RtfPipe, предоставляющий библиотеку для преобразования RTF в HTML, вы можете сослаться на некоторый фрагмент кода относительного преобразования изображений.

Если у вас возникнут проблемы при написании конвертера, вы можете задать новые темы с подробностями того, что вы сделали.

Другие вопросы по тегам