我正在尝试将图像添加到正在创建的RTF文档中。我宁愿不使用清除剪贴板的“复制/粘贴”方法(涉及将图像粘贴到RichTextBox中,然后访问.RTF属性)(因为这对我的最终用户来说是一个麻烦和困惑)。
到目前为止,我拥有的代码返回需要插入RTF文档以打印图像的字符串。输入的图像(位于$ path处)通常为bmp或jpeg格式,但是在此阶段,我并不关心如何在RTF中存储图像,只是我可以使它工作。
public string GetImage(string path, int width, int height) { MemoryStream stream = new MemoryStream(); string newPath = Path.Combine(Environment.CurrentDirectory, path); Image img = Image.FromFile(newPath); img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); byte [] bytes = stream.ToArray(); string str = BitConverter.ToString(bytes, 0).Replace("-", string.Empty); //string str = System.Text.Encoding.UTF8.GetString(bytes); string mpic = @"{\pict\pngblip\picw" + img.Width.ToString() + @"\pich" + img.Height.ToString() + @"\picwgoa" + width.ToString() + @"\pichgoa" + height.ToString() + @"\hex " + str + "}"; return mpic }
但是问题在于该代码无法正常工作,因为据我所知,字符串str没有正确的字符串转换以在RTF中工作。
编辑:我的问题是在@“ \ hex”中的\ hex之后缺少空格,并且也没有从BitConverter的返回值中删除“-”字符
试试这些链接
您必须将“ picwgoa”更改为“ picwgoal”,将“ pichgoa”更改为“ pichgoal”
string mpic = @"{\pict\pngblip\picw" + img.Width.ToString() + @"\pich" + img.Height.ToString() + @"\picwgoal" + width.ToString() + @"\pichgoal" + height.ToString() + @"\bin " + str + "}";
在这里,您可以获得支持的图像格式的列表
\ emfblip图片的来源是EMF(增强型图元文件)。 \ pngblip图片的来源是PNG。 \ jpegblip图片的来源是JPEG。 \ shppict指定Word 97-2000图片。这是目标控制字。 \ nonshppict指定Word 97-2000已写入{\ pict目标,它将在输入时不会读取。此关键字是为了与其他读者兼容。 \ macpict图片的来源是QuickDraw。 \ pmmetafileN图片的来源是OS / 2图元文件。N参数标识图元文件类型。下表\ pmmetafile表中描述了N个值。 \ wmetafileN图片的来源是Windows图元文件。N参数标识图元文件类型(默认为1)。 \ dibitmapN图片的来源是Windows设备无关的位图。N参数标识位图类型(必须等于0)。要从Windows设备独立位图包含在RTF中的信息是BITMAPINFO结构的连接,后跟实际的像素数据。 \ wbitmapN图片的来源是Windows设备相关的位图。N参数标识位图类型(必须等于0)。Windows设备相关位图包含在RTF中的信息是GetBitmapBits函数的结果。