2011-10-19 68 views
0

如何創建一個設備上下文兼容的位圖,然後將得到的把手關聯到一個BITMAP結構? 如果我寫:GDI C/C++ - BITMAP到現有HBITMAP

... 
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, width, height); // these three arguments are initialized somewhere else 
hbitmap = CreateBitmapIndirect(bitmap); // argument already initialized and properly filled 
... 

一個HBITMAP處理創建與HDC兼容,然後一個新的HBITMAP(填充位圖數據)進行初始化,雖然沒有保持其兼容性。是否有一個函數允許不從BITMAP創建HBITMAP,而是使用已有的BITMAP源填充已初始化的HBITMAP?

+1

目前還不清楚你在這裏問什麼。您無法更改現有的HBITMAP,只能創建一個具有所需特性的新HBITMAP並將其複製到該HBITMAP中。您應該考慮使用與設備無關的位圖。 – Neil

+0

我並不想改變現有的HBITMAP,但是我正在尋找諸如「HBITMAP CreateCompatibleBitmapFromBitmap(HDC的hDC,BITMAP *位圖)」功能 – Stencil

回答

0

CreateBitmapIndirect其輸入需要BITMAP。並且你可以通過GetObjectHBITMAP得到它:

BITMAP Bitmap; 
INT nResult = GetObject((HGDIOBJ) hBitmap, sizeof Bitmap, &Bitmap); 

CreateBitmapIndirect將能夠創建這種結構的位圖。或者,您可以使用CreateCompatibleBitmap創建兼容位圖,以獲取從獲得的Bitmap獲得的寬度/高度。

+0

謝謝你的答案,但我必須填寫有一個HBITMAP BITMAP提供了HBITMAP已經被初始化。 CreateCompatibleBitmap不會從現有的BITMAP創建HBITMAP。 – Stencil

+0

因此,您從原始位圖創建這個新的'HBITMAP',然後'BitBlt'數據,並最終完成一個完整的副本。這會好嗎?您無法創建引用完全相同底層數據的新位圖對象,但使用「BitBlt」複製圖片非常容易。 –

1

CopyImage功能

創建新的圖像(圖標,光標,或位圖),並複製指定的圖像的到新的屬性。如有必要,該功能可將這些位拉伸以適應新圖像的所需大小。

HANDLE WINAPI CopyImage(
    HANDLE hImage, 
    UINT uType, 
    int cxDesired, 
    int cyDesired, 
    UINT fuFlags 
); 

hImage要複製的圖像的句柄。

UTYPE的類型的圖像被複制。該參數可以是以下值之一。

  • IMAGE_BITMAP 0複製位圖。
  • IMAGE_ICON 1複製圖標。
  • IMAGE_CURSOR 2複製遊標。

cxDesired圖像的所需寬度(以像素爲單位)。如果這是零,則返回的圖像將具有與原始hImage相同的寬度。

cyDesired所需的高度,以像素爲單位,圖像的。如果這是零,則返回的圖像將具有與原始hImage相同的高度。

fuFlags

+0

謝謝你,但它仍然無法將圖像複製到設備兼容手柄(或兼容HBITMAP爲好) – Stencil

+0

@Stencil我顯然還沒有明白這個問題。如果你已經有兩個兼容的HANDLE,那麼就像Roman R.說,只需使用BitBlt從一個複製到另一個。 (如果它們不兼容,那麼你仍然可以使用StretchBlt。) – Neil