GDI C/ c++ - BITMAP转换成现有的HBITMAP

GDI C/C++ - BITMAP into an existing HBITMAP

本文关键字:HBITMAP 转换 BITMAP c++ GDI      更新时间:2023-10-16

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

...
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 ?

CopyImage function

创建新图像(图标、光标或位图),并将指定图像的属性复制到新图像上。如果有必要,该函数会拉伸这些位以适应所需的新图像的大小。

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

要复制的图像的句柄。

uType要复制的图像类型。该参数可以是以下值之一:

  • IMAGE_BITMAP 0复制位图。
  • IMAGE_ICON 1复制一个图标
  • IMAGE_CURSOR 2复制一个游标。

cxDesired图像的期望宽度,以像素为单位。如果该值为0,则返回的图像将具有与原始hImage相同的宽度。

cyDesired图像的期望高度,以像素为单位。如果此值为零,则返回的图像将具有与原始hImage相同的高度。

fuFlags

CreateBitmapIndirectBITMAP作为其输入。你可以从HBITMAP得到GetObject:

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

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