【问题标题】:VB.NET: Preserve image metadata when moved to clipboard as an imageVB.NET:作为图像移动到剪贴板时保留图像元数据
【发布时间】:2012-01-11 20:21:00
【问题描述】:

Visual Studio 2010、.NET 4、VB.NET

你好,

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

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

然后我执行 Clipboard.SetImage(myImage)。结果是所有的 PropertyItems 都被删除了(我的标题加上其他任何东西)!我通过执行 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)

这样,复制的图像与原始图像具有相同的 PropertyItems。然而,新的问题:

其他程序不再将剪贴板上的内容识别为图像,这违背了整个目的。即,如果我以这种方式将图像放在剪贴板上,当我尝试粘贴到某个接受粘贴图像的上下文中时,什么也没有发生。

怎么办?!

【问题讨论】:

    标签: vb.net image metadata clipboard


    【解决方案1】:

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

    【讨论】:

    • 这就是我最终所做的。谢谢!
    【解决方案2】:

    您尝试过 Clipboard.SetData 或 Clipboard.SetDataObject 吗? SetImage 只复制位图格式的图像,所以我对它剥离属性项并不感到惊讶。你可以试试:

    Clipboard.SetData(DataFormats.EnhancedMetafile, myImage)
    

    Clipboard.SetData(DataFormats.MetafilePict, myImage)
    

    【讨论】:

    • 是的,我试过了。我在更新中描述了我在使用这种方法时遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多