VB.NET:当作为图像移动到剪贴板时保留图像元数据

时间:2011-12-02 20:54:50

标签: vb.net image metadata clipboard

Visual Studio 2010,.NET 4,VB.NET

您好,

我正在编写一个程序来将LaTeX片段转换为可以粘贴到可以将图像粘贴到的任何程序中的图像。它工作正常但下一个显而易见的步骤是将源LaTeX代码作为图像中的一段元数据包含在内,以便可以修改结果而无需重新键入所有内容。

我成功地添加了一个标题PropertyItem,其乳胶编码为ASCII字节数组作为其值(id = 800,type = 2,value = System.Text.Encoding.ASCII.GetBytes(codestring))。在尝试将图像放在剪贴板上之前,我验证了PropertyItem确实存在。

然后我做Clipboard.SetImage(myImage)。结果是所有的PropertyItem都被删除了(我的标题加上其他任何东西)!我通过做一个给出零的MsgBox(Clipboard.GetImage.PropertyItems.Count.ToString)来检查这个。

这让我非常难过。有谁知道怎么了?

提前致谢!
布赖恩

更新:我已经想出如何将图像移动到剪贴板上然后退出,同时保留PropertyItems,如下所示:

Format = DataFormats.GetFormat(GetType(Image).FullName)
Dim dataObject As New DataObject
dataObject.SetData(Format.Name, image)
Clipboard.SetDataObject(dataObject)

Dim copiedImage As Image = CType(Clipboard.GetDataObject.GetData(Format.Name), Image)

这样,copiedImage与原始属性具有相同的PropertyItem。但是,新问题:

其他程序不再将剪贴板上的内容识别为图像,这会破坏整个目的。即,如果我以这种方式将图像放在剪贴板上,当我尝试粘贴到接受粘贴图像的某些上下文时,没有任何反应。

怎么办?!

2 个答案:

答案 0 :(得分:1)

我相信Windows剪贴板图片没有元数据。如果更改图像的格式以添加元数据,则它不再是剪贴板图像。如果其他程序可以接受它,您可以将图像文件(而不是图像)复制并粘贴到剪贴板,当目标应用程序读取元数据时,元数据当然是完整的。

答案 1 :(得分:0)

您是否尝试过Clipboard.SetData或Clipboard.SetDataObject? SetImage仅以位图格式复制图像,因此我不会对它剥离属性项目感到惊讶。你可以试试:

Clipboard.SetData(DataFormats.EnhancedMetafile, myImage)

Clipboard.SetData(DataFormats.MetafilePict, myImage)