在C#中将图像插入RTF文档
我正在创建一个可以轻松插入图像的 RichTextBox 子类。我提到这个问题开始,但我无法使生成的 RTF 字符串起作用。当我尝试设置 RTB 的 SelectedRtf 时,出现错误并显示“文件格式无效”。这是我的代码:
internal void InsertImage(Image img)
{
string str = @"{\pict\pngblip\picw24\pich24 " + imageToHex(img) + "}";
this.SelectedRtf = str; // This line throws the exception
}
private string imageToHex(Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
byte[] bytes = ms.ToArray();
string hex = BitConverter.ToString(bytes);
return hex.Replace("-", "");
}
我已经看到了我想要做的事情的工作示例,但是使用了 wmetafiles,但我不想使用该方法。有什么想法吗?
谢谢,
贾里德
I am creating a RichTextBox subclass that can insert images easily. I referred to this question to start, but I can't get the generated RTF string to work. When I try to set the SelectedRtf of the RTB, it errors out with "File format is not valid." Here is my code:
internal void InsertImage(Image img)
{
string str = @"{\pict\pngblip\picw24\pich24 " + imageToHex(img) + "}";
this.SelectedRtf = str; // This line throws the exception
}
private string imageToHex(Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
byte[] bytes = ms.ToArray();
string hex = BitConverter.ToString(bytes);
return hex.Replace("-", "");
}
I've seen working examples of what I'm trying to do, but using wmetafiles, but I would prefer not to use that method. Any ideas?
Thanks,
Jared
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我放弃了手动插入 RTF 的尝试,并决定使用剪贴板方法。我从这种类型的解决方案中发现的唯一缺点是它清除了剪贴板内容。我只是在粘贴图像之前保存了它们,然后将其设置回来,如下所示:
效果很好。
I gave up trying to insert the RTF manually, and decided to use the clipboard approach. The only detriment I could find from this type of solution was that it wiped out the clipboard contents. I simply saved them before I paste the image, then set it back like so:
Works beautifully.
RichTextBox 不支持 PNG,它支持 WMF - 但这不是 C# 中的变体。此外,RichTextBox 支持 BMP 格式的图像 - 这对于 C# 来说是个好主意,因为 Bitmap 是标准的 .Net 类。
RichTextBox doesn't support PNG, it supports WMF - but this isn't variant in C#. Also the RichTextBox supports images in BMP format - this is good idea for C#, because the Bitmap is standard .Net class.
也许这是一种幼稚的方法,但我只是使用写字板将 PNG 插入到 RTF 文档中。下面是第一个块:
正如您所看到的,即使使用 PNG 文件格式,图像头也以 \pict\wmetafile8 开头。尝试将标题更改为该格式,看看是否有效。
Perhaps this is a naive approach, but I just used WordPad to insert a PNG into an RTF document. Below is the first chunk:
As you can see, even with the PNG file format, the image header starts with \pict\wmetafile8. Try changing your header to that format and see if it works.