一尘不染

以编程方式将图像添加到RTF文档

c#

我正在尝试将图像添加到正在创建的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的返回值中删除“-”字符


阅读 658

收藏
2020-05-19

共1个答案

一尘不染

试试这些链接

您必须将“ 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函数的结果。
2020-05-19