WIN32 bitmap

本文介绍了如何在Win32环境下使用C++操作位图资源,包括从资源中加载位图、创建内存DC、位图成像以及释放资源的过程。
摘要由CSDN通过智能技术生成

目录

位图

Win32位图使用

1、在资源中添加位图资源

2、加载位图资源

3、创建一个与当前DC匹配的内存DC

5、位图成像:

6、将匹配的内存DC中位图资源取出   SelectObject

7、释放位图        DeleteObject

8、释放内存DC  ReleaseDC


位图

计算机能以位图和矢量图格式显示图像。

1、位图(BitMap)

图像又称点阵图或光栅图,它使用我们称为像素(象素,Pixel)的一格一格的小点来描述图像。

常见的文件格式: BMP、JPG(JPE,JPEG)、GIF等。

2、矢量图(Vector)

使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。

位图和矢量图最简单的区别就是:矢量图可以无限放大,而且不会失真;而位图则不能。

Win32位图使用

1、在资源中添加位图资源

2、加载位图资源

        从模块的可执行文件中加载指定的位图资源

HBITMAP LoadBitmap(
    HINSTANCE hInstance, 
    LPCTSTR lpBitmapName
);

        LoadImage可以直接从给文件中加载资源 

HANDLE  LoadImage(
    _In_opt_ HINSTANCE hInst,   //包含被装载图像模块的实例
    _In_ LPCSTR name,           //载入的文件名
    _In_ UINT type,             //为类型,它支持位图,光标等的载入
    _In_ int cx,                //指定图标或光标的宽度
    _In_ int cy,                //指定图标或光标的高度
    _In_ UINT fuLoad);          //复合值列表
WINUSERAPI

lpszName类型:LPCTSTR

加载的图片。如果 hinst 非空并且 fuLoad 参数省略了 LR_LOADFROMFILE,此参数标识 hinst 模块里的资源。如果图片资源通过名字指定,则此参数是一个以空字符结尾的指针。如果是通过序号指定,需要使用 

Win32环境下,`BITMAP`结构体和`HBITMAP`是用于表示位图的基本元素。要使用它们,通常涉及以下几个步骤: 1. **创建 BITMAP 结构体**[^1]: ```cpp BITMAP bitmap; memset(&bitmap, 0, sizeof(BITMAP)); bitmap.bmWidth = 图片宽度; // 填写宽度 bitmap.bmHeight = 图片高度; // 填写高度 ``` 2. **创建 HBITMAP**: ```cpp HDC hdc = GetDC(NULL); // 获取设备上下文 HBITMAP hbmOld = (HBITMAP)SelectObject(hdc, NULL); // 选择当前设备上的旧BMP HBITMAP hBitmap = CreateCompatibleBitmap(hdc, bitmap.bmWidth, bitmap.bmHeight); // 创建兼容BMP SelectObject(hdc, hBitmap); // 选择新创建的BMP ``` 3. **加载图片到 HBITMAP**[^2]: 使用如GDI+(如果可用)或其他库来加载位图文件到内存,然后转换成`HBITMAP`。例如,使用GDI+: ```cpp // GDI+ 示例,假设有个HICON图标 HBITMAP hBitmapFromIcon = static_cast<HBITMAP>(::ExtractIcon(hIcon, 0, 0)); // 提取单个图标 ``` 4. **保存 HBITMAP 到文件**: ```cpp SaveBitmapToFile(hBitmap, "output.bmp"); // 自定义函数,保存BMP到文件 DeleteObject(hBitmap); // 清理资源 ReleaseDC(NULL, hdc); // 释放设备上下文 ``` 5. **清理内存**: ```cpp if (hbmOld != NULL) { SelectObject(hdc, hbmOld); DeleteObject(hbmOld); } ``` 这些操作展示了基本的位图处理流程,但实际应用中可能需要考虑更多细节,比如错误处理和内存管理。如果你的目标是在C++Builder中使用Windows API,那么可能会涉及到更复杂的交互,比如TBitmap控件的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值