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。但是,新问题:
其他程序不再将剪贴板上的内容识别为图像,这会破坏整个目的。即,如果我以这种方式将图像放在剪贴板上,当我尝试粘贴到接受粘贴图像的某些上下文时,没有任何反应。
怎么办?!
答案 0 :(得分:1)
我相信Windows剪贴板图片没有元数据。如果更改图像的格式以添加元数据,则它不再是剪贴板图像。如果其他程序可以接受它,您可以将图像文件(而不是图像)复制并粘贴到剪贴板,当目标应用程序读取元数据时,元数据当然是完整的。
答案 1 :(得分:0)
您是否尝试过Clipboard.SetData或Clipboard.SetDataObject? SetImage仅以位图格式复制图像,因此我不会对它剥离属性项目感到惊讶。你可以试试:
Clipboard.SetData(DataFormats.EnhancedMetafile, myImage)
或
Clipboard.SetData(DataFormats.MetafilePict, myImage)