[VBNET] 關於剪貼簿延後提出的處理

相關文章可看本網誌前篇:擷取 Word 檔內圖片工具

基本上 Office 的剪貼簿都是延後提出,若是送到剪貼簿的格式沒有標準格式,則必須用更複雜的方式處理。Word 會填入 System.Drawing.Bitmap ,但是 Excel 只有部分圖檔會填入,部份不會。
什麼意思嗎?先看看線上手冊關於 My.Computer.Clipboard 物件成員 的描述:
ContainsImage  判斷剪貼簿是否包含影像。這個方法只適用於伺服器應用程式
延後提出是不先把資料往剪貼簿送,而是告訴剪貼簿說,軟體提供哪些格式,等到剪貼簿收到貼上時,再把需求轉給軟體,這時軟體才把指定格式的資料送給剪貼簿,所以這類軟體就是屬於上面寫的伺服器應用程式
若要抓到所有圖檔,你必須用 System.Windows.Forms.Clipboard.GetDataObject.GetFormats 取得格式,例如說不提供 System.Drawing.Bitmap 的圖檔,可能格式是:
‘(0): "Office Drawing Shape Format"
‘(1): "EnhancedMetafile"
‘(2): "MetaFilePict"
‘(3): "PNG+Office Art"
‘(4): "JFIF+Office Art"
‘(5): "GIF+Office Art"
‘(6): "PNG"
‘(7): "JFIF"
‘(8): "GIF"
‘(9): "ActiveClipBoard"
再用:
Dim ms As MemoryStream = System.Windows.Forms.Clipboard.GetDataObject.GetData("PNG", True)
取回資料流,再用:
Dim picImage As System.Drawing.Image = System.Drawing.Image.FromStream(ms)
這部份比較複雜,那個簡單的範例不能完整包含。我自己是做個 ClipboardEx 類別來處理。 

提供 System.Drawing.Bitmap 格式的圖檔,會直接傳回 System.Drawing.Bitmap 物件,就不能透過 MemoryStream 來轉換。
不見得每種圖形都會提供 PNG 格式,例如有提供 System.Drawing.Bitmap 格式的情況,是傳回:
 ‘(0): "EnhancedMetafile"
 ‘(1): "MetaFilePict"
 ‘(2): "System.Drawing.Bitmap"
 ‘(3): "Bitmap"
 ‘(4): "Biff8"
 ‘(5): "Biff5"
 ‘(6): "Biff4"
 ‘(7): "Biff3"
 ‘(8): "Biff"
 ‘(9): "SymbolicLink"
 ‘(10): "Wk1"
 ‘(11): "DataInterchangeFormat"
 ‘(12): "XML Spreadsheet"
 ‘(13): "HTML Format"
 ‘(14): "System.String"
 ‘(15): "UnicodeText"
 ‘(16): "Text"
 ‘(17): "Csv"
 ‘(18): "Hyperlink"
 ‘(19): "Rich Text Format"
 ‘(20): "Embed Source"
 ‘(21): "Object Descriptor"
 ‘(22): "Link Source"
 ‘(23): "Link Source Descriptor"
 ‘(24): "Link"
 ‘(25): "Format129"
這種情況下用 "PNG" 是抓不到圖檔的。
我自己是宣告一個陣列,當要抓點陣檔時,看看哪種格式存在:
Private Shared m_BitmapFormat As String() = New String() {"Bitmap", "PNG", "GIF", "JPEG", "JPG", "JFIF", "System.Drawing.Bitmap"}

廣告
Categories: 技術分享 | 1 則迴響

文章分頁導航

One thought on “[VBNET] 關於剪貼簿延後提出的處理

  1. 子璉

    取得圖片的程式碼回應在這篇:
    Image 類別無法成為物件執行體?
    http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3333813

    喜歡

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在WordPress.com寫網誌.

%d 位部落客按了讚: