2017-07-05 27 views
1

我正在寻找以编程方式将base64字符串转换为图像,然后将其插入到richTextBox中。无法将图像从剪贴板粘贴到RichTextBox

现在我将字符串加载到一个流中并将其转换为一个Image。然后我将它加载到剪贴板上并尝试粘贴。但是,当我执行代码时,没有任何内容粘贴到richTextBox中。运行代码后,图像在我的剪贴板中正确设置,我可以手动将其粘贴到richTextBox - 它似乎不能以编程方式工作。

这里是我的代码:

byte[] img_bytes = Convert.FromBase64String(imgStr); 
using (var ms = new MemoryStream(img_bytes, 0, img_bytes.Length)) 
{ 
    Image img = Image.FromStream(ms, true); 
    Bitmap imgb = (Bitmap)Bitmap.FromStream(ms); 
    Clipboard.SetDataObject(img); 
    Console.WriteLine(Clipboard.ContainsImage()); // Prints True 
    richTextBox1.Paste(DataFormats.GetFormat(DataFormats.Bitmap)); 
    Console.WriteLine(richTextBox1.CanPaste(DataFormats.GetFormat(DataFormats.Bitmap))); // Prints True 
    richTextBox1.Text += "\n"; 
} 

更新:看来,粘贴图像后设置文本字段删除图像。我想现在的问题是,我怎么既有图像又有文字?

+0

您可以尝试首先粘贴非流式位图吗? 'richTextBox1.Paste(DataFormats.GetFormat(DataFormats.Bitmap));'强烈类似于[msdn代码示例](https://msdn.microsoft.com/de-de/library/23kah9ca(v = vs.110)。 aspx)所以我怀疑是有问题,但也许你的位图不能以任何理由工作 – Kartoffel

+0

我似乎有同样的问题 - 我从文件中加载了一个PNG文件,但它在执行程序时无法粘贴。 PNG不会复制到我的剪贴板成功,我可以手动将其粘贴到richTextBox虽然:( – user2884505

+0

你可以尝试重现从msdn的整个代码我以前链接过吗?也许问题是其他地方... – Kartoffel

回答

1

似乎在粘贴后设置richTextBox的文本属性会删除图像。我改了行

richTextBox1.Text += "\n"; 

Clipboard.SetText("\n"); 
richTextBox1.Paste(); 

这是一个非常可怕的解决方案,但它的工作原理,我在最后期限:)我可能是不那么哈克其他建议!

+0

将数据分配给“文本”将原始内容替换为RichTextBox的内容_as string_,加上给定的字符串,你必须以某种方式到达RichTextBox的原始底层RTF数据。 – Nyerguds