我RichEditBox
在 UWP 中有一个图像已经插入其中。当图像被插入时,它被赋予了一定的宽度和高度(以像素为单位)。现在,插入图像后,我想选择图像并编辑尺寸。有什么办法可以做到这一点?
另外,我看到了一个类似的线程,它的答案不正确。请记住,这是针对 WINRT (UWP) 的。
我RichEditBox
在 UWP 中有一个图像已经插入其中。当图像被插入时,它被赋予了一定的宽度和高度(以像素为单位)。现在,插入图像后,我想选择图像并编辑尺寸。有什么办法可以做到这一点?
另外,我看到了一个类似的线程,它的答案不正确。请记住,这是针对 WINRT (UWP) 的。
我想选择图像并编辑尺寸
首先,您需要RTF
从RichEditBox
. 为此,您应该使用 的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 的库,您可以参考一些图像转换相关的代码片段。
如果您在编写转换器时遇到问题,您可以向新线程询问您所做的详细信息。