getimage / putimage / loadimage / saveimage 这一组命令和 IMAGE 对象可以实现图像处理的相关功能,下面逐个介绍。

(有点类似 tc 中的 imagesize)

[加载图片]

实现加载图片主要分三步:

1. 定义 IMAGE 对象

2. 读取图片至 IMAGE 对象

3. 显示 IMAGE 对象到需要的位置

很简单,我们看一下完整的代码:

#include

#include

void main()

{

initgraph(640, 480);

IMAGE img;// 定义 IMAGE 对象

loadimage(&img, "C:\\test.jpg");// 读取图片到 img 对象中

putimage(0, 0, &img);// 在坐标 (0, 0) 位置显示 IMAGE 对象

getch();

closegraph();

}

注意要显示的图片是 C:\test.jpg,你可以修改为自己的图片路径。

如果只需要加载图片到绘图窗体上, 那么请将 loadimage 的第一个参数设置为 NULL 即可,这样就不需要定义 IMAGE 对象了。

[保存屏幕区域]

和加载图片类似,我们可以从屏幕的某个区域加载图像至 IMAGE 对象,然后再 putimage 到需要的地方。

获取屏幕区域的代码格式:

getimage(IMAGE& img, int x, int y, int w, int h);

参数说明:

img: 保存该屏幕区域的 IMAGE 对象

x, y: 区域的左上角坐标

w, h: 区域的宽和高(注意:不是右下角坐标)

看代码:

#include

#include

void main()

{

initgraph(640, 480);

// 定义 IMAGE 对象

IMAGE img;

// 绘制内容

circle(100, 100, 20);

line(70, 100, 130, 100);

line(100, 70, 100, 130);

// 保存区域至 img 对象

getimage(&img, 70, 70, 60, 60);

// 将 img 对对象显示在屏幕的某个位置

putimage(200, 200, &img);

getch();

closegraph();

}

[移动复杂的图案]

复杂的图案如果要移动,每次都重新绘制显然效率很低,移动的时候会出现严重的屏幕闪烁。

而 getimage / putimage 的效率十分高,我们可以将复杂的图案用 getimage 保存下来,然后再逐步 putimage 实现复杂图案的移动。

这个代码就不举例了,作为作业大家练习吧。

[更多的功能]

getimage / putimage 有许多重载,这里就不多介绍了,详细看看帮助中的描述吧。

读取图片的技巧:将图片内嵌到 exe 文件中,请参见:http://hi.baidu.com/bestans/blog/item/0012a915ffd5a80f4b90a733.html

[作业]

1. 用线条、圆等各种基础绘图语句画一个“汽车”,然后用 getimage / putimage 实现该“汽车”的平滑移动。

2. 自己学一下帮助中 BeginBatchDraw / FlushBatchDraw / EndBatchDraw 三个函数,可以进一步优化“平滑移动”的效果。这三个命令挺简单的,一看就懂。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐