2011-12-02 28 views
2

的Visual Studio 2010,.NET 4,VB.NETVB.NET:移動到剪貼板上的圖像時保留圖像元數據

你好,

我寫了一個小程序,以乳膠片段轉換爲圖像它可以粘貼到任何可以粘貼圖像的程序中。它工作正常,但下一步顯然是將源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具有相同的PropertyItems作爲原件。然而,新的問題:

其他程序不承認有什麼在剪貼板上的圖像了,這違背了整個目的。也就是說,如果我以這種方式在剪貼板上放置圖像,當我嘗試粘貼到接受粘貼圖像的上下文時,沒有任何反應。

怎麼辦?

回答

1

我相信Windows剪貼板圖像沒有元數據。如果您更改圖像的格式以添加元數據,則它不再是剪貼板圖像。如果其他程序可以接受它,則可以將圖像文件(而不是圖像)複製並粘貼到剪貼板,當目標應用程序讀取它時,元數據當然是完整的。

+0

這就是我最終做的。謝謝! –

0

你試過Clipboard.SetData或Clipboard.SetDataObject? SetImage只能以位圖格式複製圖像,所以我不驚訝它會去除屬性項。您可以試試:

Clipboard.SetData(DataFormats.EnhancedMetafile, myImage) 

Clipboard.SetData(DataFormats.MetafilePict, myImage) 
+0

是的,我已經試過了。我在更新中描述了使用此方法時遇到的問題。 –