0

RichEditBox在 UWP 中有一个图像已经插入其中。当图像被插入时,它被赋予了一定的宽度和高度(以像素为单位)。现在,插入图像后,我想选择图像并编辑尺寸。有什么办法可以做到这一点?

另外,我看到了一个类似的线程,它的答案不正确。请记住,这是针对 WINRT (UWP) 的。

如何从 RichEditBox 中获取图像

4

1 回答 1

1

我想选择图像并编辑尺寸

首先,您需要RTFRichEditBox. 为此,您应该使用 的Selection属性ITextDocument。例如:

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

其次,在你得到图像RTF文本后,你需要编写一个转换器来将其转换RTF为图像。RTF 规范中的图片\pict控制字开头,可以是十六进制(默认)或二进制格式。十六进制或二进制格式的图片跟在图片目标控制字之后。这样您的转换器就可以按照此使用正则表达式来提取图像。

对于您链接的此线程,虽然它不是专门针对 UWP 应用程序,但它告诉如何从 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 的库,您可以参考一些图像转换相关的代码片段。

如果您在编写转换器时遇到问题,您可以向新线程询问您所做的详细信息。

于 2018-01-15T09:53:00.730 回答