class IMAGE(int width = 0, int height = 0);
共有成员
loadimage函数用于从文件中读取图像
// 从图片文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
void loadimage(
IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针
LPCTSTR pImgFile, // 图片文件名
int nWidth = 0, // 图片的拉伸宽度
int nHeight = 0, // 图片的拉伸高度
bool bResize = false // 是否调整 IMAGE 的大小以适应图片
);
// 从资源文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
void loadimage(
IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针
LPCTSTR pResType, // 资源类型
LPCTSTR pResName, // 资源名称
int nWidth = 0, // 图片的拉伸宽度
int nHeight = 0, // 图片的拉伸高度
bool bResize = false // 是否调整 IMAGE 的大小以适应图片
);
如果创建 IMAGE 对象的时候没有指定宽高,可以通过 Resize 函数设置。
对于没有设置宽高的 IMAGE 对象,执行 loadimage 会将其宽高设置为和读取的图片一样的尺寸。
Resize函数
// 这个函数用于调整指定绘图设备的尺寸。
void Resize(
IMAGE* pImg,
int width,
int height
);
// 绘制图像
void putimage(
int dstX, // 绘制位置的 x 坐标
int dstY, // 绘制位置的 y 坐标
IMAGE *pSrcImg, // 要绘制的 IMAGE 对象指针
DWORD dwRop = SRCCOPY // 三元光栅操作码
);
// 绘制图像(指定宽高和起始位置)
void putimage(
int dstX, // 绘制位置的 x 坐标
int dstY, // 绘制位置的 y 坐标
int dstWidth, // 绘制的宽度
int dstHeight, // 绘制的高度
IMAGE *pSrcImg, // 要绘制的 IMAGE 对象指针
int srcX, // 绘制内容在 IMAGE 对象中的左上角 x 坐标
int srcY, // 绘制内容在 IMAGE 对象中的左上角 y 坐标
DWORD dwRop = SRCCOPY // 三元光栅操作码
);
备注
三元光栅操作码(即位操作模式),支持全部的 256 种三元光栅操作码,常用的几种如下:
| 值 | 含义 |
|---|---|
| DSTINVERT | 目标图像 = NOT 目标图像 |
| MERGECOPY | 目标图像 = 源图像 AND 当前填充颜色 |
| MERGEPAINT | 目标图像 = 目标图像 OR (NOT 源图像) |
| NOTSRCCOPY | 目标图像 = NOT 源图像 |
| NOTSRCERASE | 目标图像 = NOT (目标图像 OR 源图像) |
| PATCOPY | 目标图像 = 当前填充颜色 |
| PATINVERT | 目标图像 = 目标图像 XOR 当前填充颜色 |
| PATPAINT | 目标图像 = 目标图像 OR ((NOT 源图像) OR 当前填充颜色) |
| SRCAND | 目标图像 = 目标图像 AND 源图像 |
| SRCCOPY | 目标图像 = 源图像 |
| SRCERASE | 目标图像 = (NOT 目标图像) AND 源图像 |
| SRCINVERT | 目标图像 = 目标图像 XOR 源图像 |
| SRCPAINT | 目标图像 = 目标图像 OR 源图像 |
注:
这个函数用于开始批量绘图。执行后,任何绘图操作都将暂时不输出到绘图窗口上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。
void BeginBatchDraw();
这个函数用于结束批量绘制,并执行未完成的绘制任务。
// 结束批量绘制,并执行未完成的绘制任务
void EndBatchDraw();
// 结束批量绘制,并执行指定区域内未完成的绘制任务
void EndBatchDraw(
int left,
int top,
int right,
int bottom
);
这个函数用于执行未完成的绘制任务。
// 执行未完成的绘制任务
void FlushBatchDraw();
// 执行指定区域内未完成的绘制任务
void FlushBatchDraw(
int left,
int top,
int right,
int bottom
);
#include
#include
int main(void) {
// 1. 初始化图形设备
initgraph(400, 400);
// 2. to do ......
IMAGE image; // 定义存储图片的变量
loadimage(&image, L"bk.png"); // 加载图片
int y = -image.getheight() + 400;
while (true) {
cleardevice(); // 清屏
BeginBatchDraw(); // 开始批量绘图
putimage(0, y, &image); // 显示图片
if (y >= -400) y = -image.getheight() + 400;
else y += 10;
Sleep(200);
EndBatchDraw(); // 结束批量绘图
}
_getch();
// 3. 关闭图形化设备,并释放资源
closegraph();
return 0;
}

