2
我想將GDI + Bitmap
放到剪貼板上。最明顯的方法是:如何將GDI +位圖放置到剪貼板上?
- 使用
Bitmap.GetHBITMAP
創建HBITMAP
- 使用
SetClipboardData
到HBITMAP
放置到剪貼板爲CF_BITMAP
所以我儘量僞代碼:
void PlaceBitmapOnClipboard(Bitmap image)
{
//Convert GDI+ Bitmap to GDI Bitmap
HBITMAP bmp;
image.GetHBITMAP(0, @bmp);
OpenClipboard(this.Handle);
EmptyClipboard();
SetClipboardData(CF_BITMAP, bmp);
CloseClipboard();
}
錯誤檢查已被省略˚F或說明目的;但既不是函數失敗:
- 不
GetHBITMAP
及其HRESULT
風格誤差 - 也不
SetClipboardData
返回null
但是,當我嘗試使用的CF_BITMAP
剪貼板上,它可以」 t被粘貼到油漆中:
那麼,什麼是正確的代碼填入功能:
void PlaceBitmapOnClipboard(Bitmap image)
{
//TODO: Ask Stackoverflow to figure this out
}
代替把DIB部分的依賴於設備的副本,你可能只是把DIB到剪貼板,如果你使用正確的格式。嘗試'SetClipboardData(CF_DIB,hbmp)'。 –
@AdrianMcCarthy大多數繪圖程序不檢查DIB –
剪貼板中的剪貼板將在必要時滿足以下要求CF_DIB和CF_BITMAP之間的轉換。 Microsoft建議在剪貼板上放置DIB以覆蓋依賴於設備的位圖,以避免由於自定義調色板而導致不需要的顏色更改:https://msdn.microsoft.com/en-us/library/windows/desktop/ms649013(v=vs .85).aspx#_win32_Synthesized_Clipboard_Formats –