我在 UWP 中有一个RichEditBox
,里面已经插入了一个图像。插入图像时,它被赋予一定的宽度和高度(以像素为单位)。现在,插入图像后,我想选择图像并编辑尺寸。有什么办法可以做到这一点吗?
另外,我看到一个类似的线程有一个不正确的答案。请记住,这是针对 WINRT (UWP) 的。
如何从RichEditBox获取图像
我想选择图像并编辑尺寸
首先,您需要从RichEditBox
中获取所选图像RTF
文本。为此,您应该使用ITextDocument
的Selection
属性。例如:
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[sS]+?[rn](?<imagedata>[sS]+)[rn]}\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的库,你可以引用一些图像转换相对的代码片段。
如果您在编写转换器时遇到问题,您可以询问新线程以及您所做的详细信息。