java拼图游戏图片插入与分割

合集下载

Java课程设计拼图报告

Java课程设计拼图报告

Java应用技术实训报告题目多功能拼图游戏软件所在院系软件学院所在单位软件教研室一.总体设计本系统共包括11个java源文件和2文件。

这是个功能比较齐全的拼图游戏,最关键的不用自己手动切割图片,再进行加载。

而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。

另外,该程序会根据图片的大小自动生成窗口大小,不会造成切割图片错误和切割错位。

程序最后以*.rc格式的文件来保存游戏记录。

1.类之间的关系如图1所示。

2.java源文件及其功能如表1所示。

二、详细设计该拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。

在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。

在游戏开始后会更新“开始“菜单,增加“显示图片”菜单项。

拼图结束时可以显示游戏成绩和记录的存档。

1.主类Puzzle(1)成员变量见表2(2)方法见表2-1表2-1(3)源代码见文件Puzzle.java2.类CardFrame(1)成员变量见表3(2)方法见表3-1(3)源代码见文件CardFrame.java3.类MenuFrame(1)成员变量见表4(2)方法见表4-1(3)源代码见文件MenuFrame.java4类ShowImage(1)成员变量见表5(2)方法见表5-1(3)源代码见文件ShowImage.java5类Split(1)成员变量见表6(2)方法见表6-1(3)源代码见文件Split.java6类Matrix (1)成员变量见表7(2)方法见表7-1(3)源代码见文件Matrix.java7.类Grades(1)成员变量见表8(2)方法见表8-1(3)源代码见文件CardFrame.java8.类GameOver(1)成员变量见表9(2)方法见表9-1(3)源代码见文件GameOver.java9.类point(1)成员变量见表10(2)方法见表10-1(3)源代码见文件point.java10. 类ButtonClick(1)成员变量见表11(2)方法见表11-1(3)源代码见文件ButtonClick.java11类Arg(1)成员变量见表12(2)代码见文件Arg.java三.运行效果游戏启动后的初始界面图1图1选择“关于”菜单下的“帮助“菜单弹出如下对话框:图2图2选择“关于”菜单下的“关于“菜单弹出如下对话框:图3图3选择难度级别–中级和背景图片,按开始后就可进入游戏画面如图4图4在游戏过程中可以按“开始”菜单下面的“显示图片”来查看完整图片如图5图5游戏成功后会显示你游戏所用时间和移动图块的步数如图6图6如果你的游戏时间打破记录就会首先显示如下画面如图7图7输入名字后,按确定就可以查看所有成绩排名了如图8(也可以通过“开始”菜单下的“分数排名”来查看成绩)图8所有游戏截图完毕四.工作总结经过这段时间的学习我收获不小,总结起来有如下几点:1 更进一步理解了JAVA编程的思想,体会到JAVA与其他编程语言的不同。

java拼图小游戏课程设计

java拼图小游戏课程设计

java拼图小游戏课程设计一、课程目标知识目标:1. 学生能理解Java基本语法和面向对象编程的概念;2. 学生能掌握使用Java编写图形用户界面(GUI)的方法;3. 学生能了解数组的使用以及二维数组在拼图游戏中的应用;4. 学生能掌握基本的事件处理和逻辑判断方法。

技能目标:1. 学生能运用所学知识,设计并编写出一个简单的Java拼图小游戏;2. 学生能通过调试和优化代码,提高程序的稳定性和用户体验;3. 学生能在团队协作中发挥个人优势,共同完成项目任务。

情感态度价值观目标:1. 学生培养对编程的兴趣和热情,激发探究精神;2. 学生在项目实践中,树立自信心,勇于面对挑战;3. 学生通过团队协作,学会沟通、分享和承担责任;4. 学生在编程实践中,遵循道德规范,尊重他人成果。

本课程针对初中年级学生,结合Java编程语言的教学要求,注重培养学生的编程兴趣和实际动手能力。

课程以拼图小游戏为载体,让学生在实践过程中掌握Java编程基础和面向对象编程思想,提高解决问题的能力和团队协作精神。

通过本课程的学习,期望学生能够达到上述具体、可衡量的学习成果。

二、教学内容1. Java基本语法与面向对象编程:- 数据类型、变量、运算符- 控制结构:条件语句、循环语句- 面向对象:类、对象、构造方法、封装、继承、多态2. Java图形用户界面(GUI)设计:- Swing组件:窗口、标签、按钮、面板- 布局管理器:边界布局、流布局、网格布局- 事件处理:事件监听器、事件适配器3. 数组与二维数组:- 数组的声明、初始化、遍历- 二维数组的操作与应用4. 拼图游戏原理与实现:- 游戏逻辑设计- 图片切割与显示- 拼图移动与验证5. 程序调试与优化:- 代码调试技巧- 性能优化方法6. 团队协作与项目管理:- 项目任务分配- 团队沟通与协作- 项目进度管理本教学内容根据课程目标,结合教材相关章节,以科学性和系统性为原则进行组织。

JAVA拼图游戏设计报告

JAVA拼图游戏设计报告
&& (pane[j].getBounds().y == y)) { pane[j].move("LEFT", 100);//方格向左移动一格 nullPanel.setLocation(x, y); break; } } } } else if (direction == 2) {//空方格上移动 y -= 100; if (test(x, y)) { for (int j = 0; j < 8; j++) { if ((pane[j].getBounds().x == x)
五、功能说明
游戏功能图:
拼图游戏












退 出 游 戏
本拼图游戏,运用了 Java2 中的图形处理技术和消息响应技术。通过图形技 术,实现图片的导入和分割。通过消息响应机制,使程序可以响应用户的鼠标操 作,进行拼图游戏的操作。
这个游戏主要分为四个模块,分别是游戏开始、查看图片、选择图片和退出 游戏。这四个摸块的功能各不一样,玩家如果在游戏过程中感觉拼图小块之间的 接合不明显,玩家可以点击“查看”按钮来浏览拼图完成的效果图,从而使得游 戏不会无从下手;玩家如果觉得当前拼图的画面不满意可以点击“选择”图片按 钮来更换图片,或者想更改拼图的画面,玩家可以进入游戏文件夹进行更换图片 文件,但是需要注意的是图片需要有格式,同时还需要将所要更改的图片切割成 大小相同的九个小块,具体就不详细说了,游戏文件夹中会给大家附一个.txt 文 件,供大家更换图片使用,从而提高玩家乐趣。
} } } public void breakRank() {//方格打乱重新排序 while (pane[0].getBounds().x <= 100 && pane[0].getBounds().y <= 100) {//当 第 一个方格距左上角近时

Java实现图像分割功能

Java实现图像分割功能

Java实现图像分割功能使⽤Java实现图像分割,供⼤家参考,具体内容如下为减少动画制作过程中的IO操作,我们可以使⽤连续动画来改善动画播放效率。

假如我们有如下的⼀张图像:如果我们对图像中的每张⼩图像单独分割成独⽴的⽂件,那么当每次要使⽤这些⼩图像的时候,我们都得从⽂件中读取图像信息。

实际上我们可以利⽤Java将整张⼤图像中的每个⼩图像在应⽤程序中分割出来,然后使⽤的时候,直接从分割后的图像中获取需要使⽤的⼩图像就可以了,这样就不⽤每次都从⽂件中读取⼩图像信息,效率⾃然会⽐较⾼。

那么如何来实现图像分割操作呢?⽰例:import ponent;import java.awt.Image;import java.awt.image.CropImageFilter;import java.awt.image.FilteredImageSource;import java.awt.image.ImageFilter;/*** 图像处理辅助类** @author ⼩明**/public class ImageUtil {/*** 分割图像** @param image* 传⼊的图⽚对象* @param rows* 垂直⽅向上需要裁剪出的图⽚数量 - ⾏* @param cols* ⽔平⽅向上需要裁剪出的图⽚数量 - 列* @param x* 开始裁剪位置的X坐标* @param y* 开始裁剪位置的Y坐标* @param width* 每次裁剪的图⽚宽度* @param height* 每次裁剪的图⽚⾼度* @param changeX* 每次需要改变的X坐标数量* @param changeY* 每次需要改变的Y坐标数量* @param component* 容器对象,⽬的是⽤来创建裁剪后的每个图⽚对象* @return 裁剪完并加载到内存后的⼆维图⽚数组*/public static Image[][] cutImage(Image image, int rows, int cols, int x,int y, int width, int height, int changeX, int changeY,Component component) {Image[][] images = new Image[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {ImageFilter filter = new CropImageFilter(x + j * changeX, y + i* changeY, width, height);images[i][j] = component.createImage(new FilteredImageSource(image.getSource(), filter));}}return images;}}编写⼀个专门分割图像的⽅法cutImage(),该⽅法中使⽤到的CropImageFilter类、FilteredImageSource类的详情,⼤家可以参考JavaAPI⽂档。

基于Java的拼图游戏设计

基于Java的拼图游戏设计

Java课程设计——拼图游戏信101 孙杰2010314126Java课程设计——拼图游戏班级:信101学号:2010414126姓名:孙杰指导老师:李红强基于Java的拼图游戏设计游戏实现功能解析及界面游戏规则介绍1)本游戏是一个Java语言的拼图游戏,有一个格子是空的,其他格子内随机放置由要拿来拼图的图片切割成的若干个小图片,图片的切割按照一定的公式计算,因为,该通过单击任意一个与空格子相邻的方块可以把该方游戏中设有拼图游戏的等级,根据不同的等级,按照公式会切割成不同的小图片块数。

2)在开始游戏之前,可以选择游戏等级后再点击“开始”菜单里的“新游戏”,进行拼图游戏,通过将空格旁边的小图片移入空格子内(不断的移动方块),来实现拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。

3)游戏拼完后,会弹出一个“信息”框,显示你玩游戏所用的步数与时间,点击“确定”后,会弹出一个“输入”框,可以在里面输入游戏者的姓名,单击“确定”后会弹出游戏的记录框。

4)游戏的简单规则在游戏界面的“关于”菜单内的“帮助”信息框内已经简单介绍了。

游戏前可以先预览看看。

游戏实现功能主窗口界面1)游戏初始状态当游戏刚运行时,会出现如下界面,本游戏中已经存在了三张图片,如过游戏者想拼自己感兴趣的图片的话,可以将自己的图片放入到“background”(背景图片)文件夹中,再进行“选择”->“背景图片”中选择你自己的图片,然后选择“等级”->“困难”或“普通”或“简单”,进行等级选择,最后选择“开始”->“新游戏”就可以拼自己想拼的图了。

初始窗口如图1所示:图1 游戏初始窗口2)游戏进行状态当游戏者选择好图片与等级后,就可以进行拼图游戏了及进入游戏的进行状态。

3)游戏暂停状态当游戏者,在游戏过程中半途暂停游戏的话,将出现如图3所示的游戏暂停状态的界面。

当游戏者又想继续游戏时,直接单击界面上的“继续”字样,就可以继续游戏了。

JAVA课程设计 拼图游戏复习进程

JAVA课程设计  拼图游戏复习进程

拼图游戏1.游戏规则介绍(1)本游戏中有一个格子是空的,其他格子内随机放置由要拿来拼图切割成的8个小图片。

在开始游戏之前,会出现一张完整的图片,点击“菜单”里面的“开始”,进行拼图游戏,通过将空格旁边的小图片与空格交换位置(不断的移动方块),来实线拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。

在移动过程中,窗口右边会显示移动的步数。

(2)游戏拼完后,会弹出一个信息框,询问是否再玩一局,点击“Yes”将再打开一个游戏开始的界面,可以继续新的一局游戏,点击“No”将结束游戏,关闭所有窗口。

2.游戏实现的功能(1)点击运行程序,将弹出一个窗口,显示一张完整的图片。

(2)菜单栏的菜单,会出现3个菜单项:“开始”、“重新开始”、“结束”。

点击“开始”,即开始一局游戏;“在游戏的任何时候点击”重新开始“,即结束当前游戏,重新开始一局新的游戏;点击“退出“,立即退出游戏,关闭窗口。

(3)在游戏过程中,游戏界面右边会同步显示当前的步数。

游戏的一些界面:(1)主界面:(2)菜单项:(3)帮助--->关于(4)点击开始(5)游戏过程(6)游戏成功(7)破纪录3.程序实现Pt类:(1)建立一个类Pt,public class Pt extends JFrame implements KeyListener{}。

该类继承父类JFrame,实现KeyListener接口。

(2)Pt类的构造函数Pt()。

定义窗口参数,添加菜单栏和多个标签;调用读文件函数read (),读取该游戏的最高记录,并将该记录输出到标签上;为各个菜单添加事件,鼠标点击“开始”菜单,将调用star()函数,游戏开始,点击“重新开始”,将关闭当前窗口并重新打开游戏,点击“退出游戏”,将立即退出游戏;点击“帮助- 关于”,将新建About类的一个对象,弹出游戏说明的窗口。

(3)Pt类的star()函数。

将未开始的完整图片设为不可见;加入键盘监视器;调用生成0~8随机序列的函数,返回随机序列;根据该随机序列调用加入图标函数putLabel(),将9个方块加上图片;定义一个一维int型数组number[],记录随机序列,供后面判断是否拼图成功。

java课程设计拼图游戏

java课程设计拼图游戏

• 状态判断
通过调用public void checkStatus()方法来 检测拼图状态,判断是否拼图成功,确定游戏是否结 束。
• 附加功能
调用public void run()方法,给游戏过程添加计时进程。 建立线程,对游戏进行计时,并定义一个方法来对玩家 算分
• 程序界面
• 本游戏在Pintu类中创建应用程序窗体,实 例化绘图容器对象PicPanel和状态栏标签对 象,并引入时间处理机制对键盘事件进行 响应 • 在类PicPanel中实现图片的绘制,使用多线 程机制来计算时间的流逝,并响应鼠标事 件来实现图片的移动。
主程序实现过程
• • • • • • • • 1、定义程序实现所需的绘图容器类面板; 2、定义键盘触发事件,并设置监听器; 3、定义鼠标触发事件,并设置监听器; 4、装载主程序所需图片; 5、编写程序对装载图片进行分割初始化; 6、定义图片分割之后各小图片移动方向及实现方法; 7、对空白区域小图片进行设置; 8、建立线程,对游戏进行计时,并定义一个方法来对玩家算分
• 功能分析
1、由于要计算游戏的时间,需要引入线程,通
过实现Runnable接口和创建Thread类来实现线程 的功能。使用多线程机制来计算时间的流逝。引 入AWT绘图包,实现图片的绘制。 引入事件处理 机制,要求对鼠标事件,键盘事件进行相应,实 现移动图片,预览全图等功能。 2、 按键“Y”实现临时的原图整体预览。 按键 “1或者2或者3”实现大图选择。
Java课程设计
概要设计
• • • • • • • • •
选游功 题戏能 规分 则析
界 面 初 始 化
事 件 处 理
状 态 判 断
附 加 功 能
程 序 源 代 码

Java拼图游戏面向对象课程设计报告

Java拼图游戏面向对象课程设计报告

姓名Name学号Student No.20137045 班级Class代码总行数Code Lines 222项目名称Item1.实验目的本次课程设计旨在通过一个完整项目的开发,巩固面向对象程序设计、软件工程、数据库技术等课程的相关知识,加深学生对Java语言的理解,尤其是对面向对象思想、Java编码规范、JDBC访问数据库的理解,使学生进一步掌握环境构建、代码编写、文档阅读与理解、文档编写、软件测试、发行与部署等技能,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。

2.实验内容本次课程设计选定的实验项目是使用JAVA语言编写一个拼图游戏并实现其基本功能。

不用自己手动切割图片,再进行加载。

而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。

利用了Graphics中的public abstract boolean drawImage()方法把img 中由(sx1, sy1)(sx2, sy2)指定的矩形区域画到observer 中由(dx1, dy1)(dx2, dy2)指定的矩形区域内进行构思拼图游戏的具体实现。

导入了一个可播放背景音乐的jar包,在玩游戏时可以欣赏背景音乐。

3.类图4.运行界面图1、游戏初始界面图2、游戏运行界面图3、拼图成功界面5.关键代码(要求在类的定义以及方法定义的前面给出相关描述信息)//定义一个Pintu类public class Jpgsaw extends JFrame{private Image image, buff; //原始图片,缓存图片private int[][] map = {{0, 1, 2},{3, 4, 5},{6, 7, 8}}; //定义数组map,给分割后的图片标号private Point point = new Point(2, 2); //记录第九块图片位置private int sx; //分割后每一个图片的宽度private int sy; //分割后每一个图片的高度private Canvas canvas; //加载图片容器,定义可以显式定位子元素使用坐标是相对 Canvas 区域的区域,绘制图形private Graphics gs; //gs画出Canvas图片坐标private Graphics gb; //gb画出buff图像private boolean isRunning = false; //游戏是否正在进行private JButton start = new JButton("开始新的游戏"); // 按钮1private JButton show = new JButton("显示正确图片"); //按钮2private JTextArea showStep = new JTextArea("显示步骤");//设置步骤显示private JPanel panel = new JPanel(); //一般轻量级面板容器,装在上面2个按钮private int steps = 0; // 记录移动的步骤public Jpgsaw(String title) { //构造方法,初始化变量super(title);//调用了当前类Jpgsaw的父类JFrame的构造方法try { //异常抛出image = ImageIO.read(new File("gg.jpg")); //装载图片} catch (IOException e) {//捕获自定义的异常e.printStackTrace();}initScreen(); //用此方法来初始化canvas,由于canvas 初始化较复杂,所以单独写一个方法buff = new BufferedImage(715, 381, BufferedImage.TYPE_INT_BGR);//Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片gb = buff.getGraphics();//存在于Image类中,存在于缓冲器中的图片,设置坐标sx = image.getWidth(this) / 3;//图片分割后每一个图片的宽度sy = image.getHeight(this) / 3;//图片分割后每一个图片的高度setLayout(new BorderLayout());//设置此布局方法,加入控件add(panel, BorderLayout.SOUTH);//布置容器的边框布局,它可以对容器组件进行安排,并调整其大小add(canvas, BorderLayout.CENTER);panel.setLayout(new GridLayout(1, 4));//把组件按指定的几行几列分开,添加其他组件时,会按添加的顺序挨个添加到该组件上panel.add(start);panel.add(show);panel.add(showStep);showStep.setEditable(false);//步骤默认false,使调用这个函数的控件不能被编辑showStep.setFont(new Font("黑体", Font.PLAIN, 16));//设置字体setSize(720, 425);setResizable(false);//表示生成的窗体大小,不可改变大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//执行关闭按钮,关闭窗体 }//具体实现Canvas,进行初始化void initScreen(){canvas = new Canvas(){public void paint(Graphics g) { //覆写canvas的paint 方法gs = getGraphics(); //得到Canvas的Graphicsif (isRunning) {drawScreen();//运行,调用此方法} else {g.drawImage(image, 0, 0, this);//在指定的位置使用原始物理大小绘制指定的 Imageg.setColor(Color.gray);//设置前景颜色,变为灰色}}};canvas.addMouseListener(new MouseAdapter() {//添加鼠标事件监听器//覆写mousePressed 方法,实现鼠标点击时,图片移动public void mousePressed(MouseEvent me) {if (!isRunning) {return; // 如果未运行,说明图片未分割,直接返回}int x = me.getX() / sx;//判断鼠标点击的图片在map中的编号int y = me.getY() / sy;int fx = (int) point.getX();//记录第九块图片(未显示图片)的位置int fy = (int) point.getY();int canMove = Math.abs(fx - x) + Math.abs(fy - y); // 如鼠标点击位置与第九块图片(可移动的位置)相邻,则canMove 必为 1if (canMove != 1 ){return; // canMove 不为1,不能移动图片}map[fx][fy] = map[x][y]; //点击图片坐标赋给第九块图片map[x][y] = 8; //第九块图片给掉点击图片point.setLocation(x, y); //point 坐标改变drawScreen(); //重绘屏幕,实现图片移动showStep.setText("移动步骤:" + ++steps); //步骤加一 }});//为Start按钮添加事件start.addActionListener(new ActionListener() {@SuppressWarnings("deprecation")public void actionPerformed(ActionEvent ae) {initMap();drawScreen();isRunning = true;steps = 0;showStep.setText("移动步骤:" + steps);show.setLabel("显示正确图片");}});//为show按钮添加事件show.addActionListener(new ActionListener() {@SuppressWarnings("deprecation")public void actionPerformed(ActionEvent ae) {if (show.getLabel().equals("继续游戏")) {drawScreen();isRunning = true;show.setLabel("显示正确图片");} else {gs.drawImage(image, 0, 0, canvas);isRunning = false;show.setLabel("继续游戏");}}});}//容器内游戏运行时图片的显示方法void initMap() {long time = System.nanoTime();//得到系统当前时间作为随机数种子 java.util.Random rnd = new java.util.Random(time);int temp, x1, y1, x2, y2;//随机交换图片for (int i = 0; i < 100; i++) {x1 = rnd.nextInt(3);x2 = rnd.nextInt(3);y1 = rnd.nextInt(3);y2 = rnd.nextInt(3);temp = map[x1][y1];map[x1][y1] = map[x2][y2];map[x2][y2] = temp;}outer: //标记8号图片(即空白图片)for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 8) {point.setLocation(i, j);break outer;//跳转到带有空白标号的行}}}}//把整个canvas上的所有对象都绘制一遍void drawScreen() {int sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2;int t1, t2;gb.setColor(Color.white);gb.clearRect(0, 0, sx * 3, sy * 3);//清空整个缓冲区图片for (int x = 0; x < 3; x++){//图片在横行的显示for (int y = 0; y < 3; y++){//图片在列上的显示if(map[x][y] != 8) {// 目的地址dx1 = x * sx; dy1 = y * sy; // 移动的左上角坐标dx2 = dx1 + sx - 1; dy2 = dy1 + sy - 1; // 移动的右下角坐标// 源地址t1 = map[x][y] % 3 ; t2 = map[x][y] / 3 ;sx1 = t1 * sx; sy1 = t2 * sy; // 移动的左上角图标sx2 = sx1 + sx - 1; sy2 = sy1 + sy - 1; // 移动的右下角坐标gb.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, Color.white, canvas);//绘制缓冲区图片}}}gs.drawImage(buff, 0, 0, canvas);//将缓冲区图片绘制到 canvas 上}//主方法,实现Jpgsaw类的使用,运行游戏public static void main(String[] args) {Jpgsaw pintu = new Jpgsaw("JpgsawGame");new Thread().start();//新建一个ThreadStart对象并传入一个方法给线程调用pintu.setVisible(true);//最后调用,避免组件不显示,利用线程设置组件可见}}/*播放背景音乐*/public class PlayMe {public static void playMe() {try {String file = "/JpgSaw/JpgsawGame/src/test.mp3"; //音乐文件路径FileInputStream fis = new FileInputStream(file); //路径设置BufferedInputStream bis = new BufferedInputStream(fis);//带有缓冲区的输入流new Player(bis).play(); //jar包中定义好的‘播放’方法}catch (Exception e){System.out.print("ERROR " + e);}}}6.上机调试及问题分析1、图片的存放位置出现错误,图片引用路径报错。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//四个参数分别为图像起点坐标和宽高
//即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(j * 200, i * 150,
destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
int srcWidth = bi.getHeight(); //源图宽度
int srcHeight = bi.getWidth(); //源图高度
if (srcWidth > destWidth && srcHeight > destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
new FilteredImageSource(image.getSource(),
cropFilter));
BufferedImage tag = new BufferedImage(destWidth,
destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
cols = srcWidth / destWidth;
} else {
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
if (srcHeight % destHeight == 0) {
rows = srcHeight / destHeight;
Image.SCALE_DEFAUቤተ መጻሕፍቲ ባይዱT);
destWidth = 200; //切片宽度
destHeight = 150; //切片高度
int cols = 0; //切片横向数量
int rows = 0; //切片纵向数量
//计算切片的横向和纵向数量
if (srcWidth % destWidth == 0) {
public static void cut(String srcImageFile, String descDir, int destWidth,
int destHeight) {
try {
Image img;
ImageFilter cropFilter;
//读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
e.printStackTrace();
}
}
g.drawImage(img, 0, 0, null); //绘制缩小后的图
g.dispose();
//输出为文件
ImageIO.write(tag, "JPEG", new File(descDir
+ "pre_map_" + i + "_" + j + ".jpg"));
}
}
}
} catch (Exception e) {
} else {
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
//循环建立切片
//改进的想法:是否可用多线程加快切割速度
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
相关文档
最新文档