首页 > 解决方案 > WinForms RichTextBox将图像保存为无法显示的pngblip

问题描述

我正在使用带有 .net 4.7.2 的 winforms。

将剪贴板中的图像粘贴到 RichTextBox 时出现问题。在某些平台(Win2012 和 Win2016)上,它将图像作为 \pngblip 存储在 RTF 中。当我在 RichTextBox 中再次加载它时,图像不会显示。

在 Windows 7 上,它将图像存储为 \wmetafile8 显示正常。

我已经将一个非常简单的示例项目上传到谷歌驱动器。按顶部按钮将图像放在剪贴板上并将其粘贴到源富文本框中。然后看看它在另一个richtextbox中是如何呈现的以及rtf是什么样子的。

这在 Windows 7 和 Windows 2012 上的工作方式不同。在 Windows 7 上,目标 rtf 以

{\rtf1\ansi\ansicpg1252\deff0\deflang1030{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\f0\fs17{\pict\wmetafile8\picw423\pich423\picwgoal240\pichgoal240 
0100090000...

注意“生成器 Msftedit”部分。在 Windows 2012 上,我得到

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1030{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
{\*\generator Riched20 6.3.9600}\viewkind4\uc1 
\pard\f0\fs17{\pict{\*\picprop{\sp{\sn wzDescription}{\sv Image}}{\sp{\sn posv}{\sv 1}}
}\pngblip\picw423\pich423\picwgoal240\pichgoal240 
895...

这里的“生成器 Riched20”有什么不同?我认为这是关键?

带有 \pngblip 的 rtf 不能由 RichTextBox 呈现 - 无论是在 Windows 7 上还是在 Windows 2012 上。 \wmetafile 呈现良好。

这当然只是一个示例应用程序 - 在实际程序中,用户将粘贴另一个应用程序放在剪贴板上的图像,rtf 将保存到数据库中,稍后将以不同的形式显示。

并且将所有内容都转换为使用 HTML 不是一种选择,因为我们有一个包含数万个 RTF 条目的现有数据库。

标签: .netimagerichtextbox

解决方案


推荐阅读