GDI C / C ++ - BITMAP成为现有的HBITMAP

时间:2011-10-19 20:23:49

标签: c++ bitmap gdi+ gdi hbitmap

如何创建设备上下文兼容位图,然后将获取的句柄与BITMAP结构相关联? 如果我写:

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

创建与hdc兼容的HBITMAP句柄,然后初始化新的HBITMAP(填充位图数据),但不保持其兼容性。是否有一个函数允许不从BITMAP创建HBITMAP,而是用已经存在的BITMAP源填充初始化的HBITMAP?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

CreateBitmapIndirect对其输入采用BITMAP。您可以从HBITMAP

通过GetObject获取
BITMAP Bitmap;
INT nResult = GetObject((HGDIOBJ) hBitmap, sizeof Bitmap, &Bitmap);

CreateBitmapIndirect将能够从此结构创建一个位图。或者,您可以使用CreateCompatibleBitmap创建兼容的位图,从获得的Bitmap提供宽度/高度。