本节考虑在Java的专用画图控件画布类Canvas中直接作图,而不是在将图像分成9个分图分别放置到9个控件中。这个方法得益于Java作图函数drawImage()的强大功能。
1.函数drawImage()直接作图的方法
(1)Java的作图函数drawImage()有多种重载
●drawImage(Image image,int x,int y,ImageObserver observer);
将image在坐标(x,y)处,以原图的宽高画出image,(不具有缩放功能)。
●drawImage(Image image,int x,int y,int width,int height,ImageObserver observer);
将image在坐标(x,y)处,宽为width高为height的大小画出,(因此,具有缩放功能)。
●drawImage(Image image,int x0,int y0,int x1,int y1,
int u0,int v0,int u1,int v1,ImageObserver observer);
取image从左上角(u0,v0)到右下角(u1,v1)矩形区内的图,放到左上角(x0,y0)到右下角(x1,y1)的矩形区画出。其中observer—报告透视过程进行的对象,一般用this,(因此,具有缩放功能)。
【例15-5】函数drawImage()的3种重载和图像载入画布类。
运行结果如图15-7所示。
(2)框架Frame与画布的原点
如图15-7所示。注意,经过实际测试,画布Canvas的原点在框架中的坐标是(0,30)。所以,在画布中作图,使用语句
相当于在框架中(www.xing528.com)
图15-7 在Frame的Canves中drawImage()
2.在画布类中实现拼图游戏
【例15-6】设计图像载入画布类的鼠标操作。
3.[编程说明]
(1)画布类Canvas
原始画布类Canvas必须经过继承才能应用。其中作图方法paint()中使用了drawImage()中最复杂的一种,即
请仔细地分析与体会其中各参数的关系,这种用法不常见到。
(2)图像映射与数组mapNo[]
mapNo[y]==x的意义是“原图image上编号为x的块,变换到编号为y的区域”。与表达式revNo[x]==y具有相同的意义。
由于使用了画布类,数据的输入与输出需要通过一些输入和输出函数进行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。