效果图如下:
源码如下:
package org.test;/***Title: LoonFramework
*
Description:拼图图像处理[未优化]
*
Copyright: Copyright (c) 2007
*
Company: LoonFramework
* @author chenpeng * @email:ceponline@yahoo.com.cn* @version 0.1*/import java.awt.Canvas;import java.awt.Color;import java.awt.Event;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.MediaTracker;import java.awt.image.BufferedImage;import org.loon.framework.game.helper.ImageHelper;public class BlockImage extends Canvas { /** * */ private static final long serialVersionUID = 1L; private Image _img; private Image _img2; private Graphics bg; private Image backimage; private int blocks[]; private boolean isEvent; private MediaTracker mt; private int _width; private int _height; private int _RS; private int _CS; private Image screen = null; private Graphics later = null; private int _objWidth; private int _objHeight; private int _COUNT; /** * 析构函数,内部调用init方法。 * * @param bImage * @param overImage * @param cs * @param rs */ public BlockImage(Image bImage, Image overImage, int cs, int rs) { init(bImage, overImage, cs, rs); } /** * 初始化拼图参数。 * * @param bImage * @param overImage * @param cs * @param rs */ public void init(Image bImage, Image overImage, int cs, int rs) { // 列数 _CS = cs; // 行数 _RS = rs; // 加载拼图用图像。 _img = bImage; // 获得实际窗体宽。 _width = _img.getWidth(null); // 获得实际窗体高。 _height = _img.getHeight(null); // 获得单块图像宽。 _objWidth = _width / _CS; // 获得单块图像高。 _objHeight = _height / _RS; // 本程序直接使用backimage上一块图形区域缓冲选择项,所以实际背景图像高=图形高+额外图块高。 backimage = new BufferedImage(_width, _height + _objHeight, 1); // 获得生成的图形 later = backimage.getGraphics(); // 再创建一块图像区域,作为图像缓存用。 screen = new BufferedImage(_width, _height, 1); // 获得缓存的图形 bg = screen.getGraphics(); // 获得等同图片总数的数组。 _COUNT = _CS * _RS; blocks = new int[_COUNT]; // 初始化为非点击。 isEvent = false; // 加载完成拼图的显示图。 _img2 = overImage; // 初始化图块参数。 for (int i = 0; i < _COUNT; i++) { blocks[i] = i; } // 载入MediaTracker,用以跟踪图像状态。 mt = new MediaTracker(this); // 加载被跟踪的图像。 mt.addImage(_img, 0); mt.addImage(_img2, 0); // 同步载入。 try { mt.waitForID(0); } catch (InterruptedException interruptedexception) { return; } // 随机生成图像面板内容。 rndPannel(); } /** * 描绘窗体图像。 */ public void paint(Graphics g) { // 检查图像载入。 if (mt.checkID(0)) { // 描绘底层背景。 bg.drawImage(backimage, 0, 0, null); // 判断是否触发完成事件。 if (!isEvent) { // 设置背景色。 bg.setColor(Color.black); // 循环绘制小图片于背景缓存中。 for (int i = 0; i < _CS; i++) { for (int j = 0; j < _RS; 我们一直在旅行,一直在等待某个人可以成为我们旅途的伴侣,