目录
位图
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)
使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。
位图和矢量图最简单的区别就是:矢量图可以无限放大,而且不会失真;而位图则不能。
从模块的可执行文件中加载指定的位图资源
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 模块里的资源。如果图片资源通过名字指定,则此参数是一个以空字符结尾的指针。如果是通过序号指定,需要使用 MAKEINTRESOURCE 宏。
如果 hinst 参数是 NULL 并且 fuLoad 参数忽略了 LR_LOADFROMFILE ,此参数指定 OEM 图片。
如果 fuLoad 参数包含了 LR_LOADFROMFILE 值,此参数指定文件系统的图片文件名,此时,hinst 应该为 NULL。
uType类型:UINT
被加载的图片类型,可用值如下:
宏 | 值 | 意义 |
---|---|---|
IMAGE_BITMAP | 0 | 位图 |
IMAGE_CURSOR | 2 | 光标 |
IMAGE_ICON | 1 | 图标 |
cxDesired类型:int
以像素计算,图片的宽度。如果参数是0并且 fuLoad 参数是 LR_DEFAULTSIZE,此函数使用 SM_CXICON 或 SM_CXCURSOR 的系统规格去设置宽度;如果此参数是0并且 fuLoad 没有指定 LR_DEFAULTSIZE,函数使用资源的原本宽度。
cyDesired类型:int
以像素计算,图片的高度。如果参数是0并且 fuLoad 参数是 LR_DEFAULTSIZE,此函数使用 SM_CYICON 或 SM_CYCURSOR 的系统规格去设置高度;如果此参数是0并且 fuLoad 没有指定 LR_DEFAULTSIZE,函数使用资源的原本高度。
fuLoad类型:UINT 可以组合使用
宏 | 值 | 意义 |
---|---|---|
LR_CREATEDIBSECTION | 0x00002000 | 当参数uType指定为IMAGE_BITMAP时,使得函数返回一个DIB部分位图,而不是一个兼容的位图。这个标志在装载一个位图,而不是映射它的颜色到显示设备时非常有用 |
LR_DEFAULTCOLOR | 0x00000000 | 默认。无特殊操作。与 LR_MONOCHROME 相反 |
LR_DEFAULTSIZE | 0x00000040 | 如果 cxDesired或cyDesired被设为零,使用系统指定的规格标识光标或图标的宽和高。如果这个参数不被设置且cxDesired或cyDesired被设为零,函数使用实际资源尺寸。如果资源包含多个图像,则使用第一个图像的大小 |
LR_LOADFROMFILE | 0x00000010 | 从文件系统中加载文件 |
LR_LOADMAP3DCOLORS | 0x00001000 | 查找图像的颜色表并且按下面相应的3D颜色表的灰度进行替换。 •Dk Gray, RGB(128,128,128) 替代 COLOR_3DSHADOW •Gray, RGB(192,192,192) 替代 COLOR_3DFACE •Lt Gray, RGB(223,223,223) 替代 COLOR_3DLIGHT 如果位图颜色深度高于8bpp不要使用此标志 |
LR_MONOCHROME | 0x00000001 | 装载黑白图 |
LR_SHARED | 0x00008000 | 若图像将被多次装载则共享。如果LR_SHARED未被设置,则再向同一个资源第二次调用这个图像时就会再装载一遍这个图像且返回不同的句柄 |
LR_VGACOLOR | 0x00000080 | 使用VGA颜色 |
返回值 类型:HANDLE
成功返回刚刚加载的图片句柄。
HDC CreateCompatibleDC(
HDC hdc //设备描述表句柄
);
注:
CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用GetDeviceCaps函数来确定一个设备是否支持这些操作。
4、将位图资源放入匹配的内存DC中
HGDIOBJ SelectObject(
HDC hdc, // handle to DC
HGDIOBJ hgdiobj // handle to object
);
1:1成像
BOOLBitBlt(
int x, //目标矩形区域的左上角x轴坐标点。
int y, //目标矩形区域的左上角y轴坐标点。
int nWidth, //在目标设备中绘制位图的宽度。
int nHeight, //在目标设备中绘制位图的高度。
CDC*pSrcDC, //源设备上下文对象指针。
int xSrc, //源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
int ySrc, //源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
DWORDdwRop //光栅操作代码
);
缩放成像
BOOL StretchBlt(
int x, //目标矩形区域的左上角x轴坐标点。
int y, //目标矩形区域的左上角y轴坐标点。
int nWidth, //在目标设备中绘制位图的宽度。
int nHeight, //在目标设备中绘制位图的高度。
CDC*pSrcDC, //源设备上下文对象指针。
int xSrc, //源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
int ySrc, //源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
int nWidthSrc, //指定源矩形的宽度
int nHeightSrc,// 指定源矩形的高度
DWORD dwRop //光栅操作
);