如何在UWP中的RichEditBox中获取图像

时间:2018-01-12 04:32:50

标签: c# uwp windows-runtime richeditbox

我在UWP中有{{1}},其中已插入图像。插入图像时,它被赋予一定的宽度和高度(以像素为单位)。现在,在插入图像后,我想选择图像并编辑尺寸。有没有办法实现这个目标?

另外,我看到一个回答错误的类似帖子。请记住这是WINRT(UWP)。

How to get image from RichEditBox

1 个答案:

答案 0 :(得分:1)

  

我想选择图片并编辑尺寸

首先,您需要从RTF获取所选图片RichEditBox文字。为此,您应该使用ITextDocumentSelection属性。例如:

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

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

对于您链接的this thread,虽然它不是专门用于UWP应用程序,但它告诉从RTF中提取Image的方法,您仍然可以参考。我使用@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的库,您可以参考一些图像转换相关代码片段。

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