小编典典

如何将图像插入RichTextBox?

c#

我看到的大多数示例都说要将其放在剪贴板上并使用粘贴,但这似乎不是很好,因为它会覆盖剪贴板。

我确实看到了一种使用pinvoke将图像手动转换为RTF并将图像转换为WMF的方法。这是最好的方法吗?我还能做些更简单的事情吗?


阅读 253

收藏
2020-05-19

共1个答案

小编典典

最直接的方法是修改RTF代码以自己插入图片。

在RTF中,图片的定义如下:

’{‘\
pict(brdr?&shading?&picttype&pictsize&metafileinfo?)数据’}’问号表示控制字是可选的。“数据”只是十六进制格式的文件内容。如果要使用二进制,请使用\
bin控制字。

例如:

{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860 hex data}
{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860\bin binary data}

\ pict =开始一个图片组,\ pngblip = png图片\ picwX =图片的宽度(X是像素值)\ pichX =图片的高度\
picwgoalX =所需的图片宽度(以缇为单位)

因此,要插入图片,您只需要打开图片,将数据转换为十六进制,将这些数据加载到字符串中并在其周围添加RTF代码即可定义RTF图片。现在,您有了一个包含图片数据的自包含字符串,可以将其插入文档的RTF代码中。不要忘记结尾的“}”

接下来,您从RichTextBox(rtbBox.Rtf)获取RTF代码,将图片插入适当的位置,然后设置rtbBox.Rtf的代码

您可能会遇到的一个问题是.NET RTB不能很好地支持RTF标准。

我刚刚制作了一个小型应用程序*,可让您快速测试RTB中的一些RTF代码并查看其处理方式。您可以在此处下载它: RTB测试器http://your-translations.com/toys)。

您可以将一些RTF内容(例如,从Word中)粘贴到左侧的RTF框中,然后单击“显示RTF代码”以在右侧的RTF框中显示RTF代码,也可以在右侧的RTB中粘贴RTF代码,然后单击点击“应用RTF代码”以查看左侧的结果。

当然,您可以根据需要编辑代码,这使得测试RichTextBox是否支持所需的命令或学习如何使用RTF控制字非常方便。

您可以在线下载RTF的完整规范。


注意:这只是我在5分钟内拍过的一小件事,所以我没有实现文件打开或保存,拖放或其他文明操作。

2020-05-19