JAVA 图像操作辅助类
package util; import java.awt.Component;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer; /**
* 图像操作辅助类
*
* @author hellokitty燕
*
*/
public class ImageUtils { private ImageUtils() {
} /**
* 使用媒体追踪器加载单张图像
*
* @param mediaTracker
* 媒体追踪器
* @param image
* 待加载图像
* @return 加载完毕的图像
*/
public static Image addImage(MediaTracker mediaTracker, Image image) {
// 将图片放置到媒体追踪器的图片列表中,准备开始加载工作
mediaTracker.addImage(image, );
try {
// 加载所有图片
mediaTracker.waitForAll();
} catch (InterruptedException e) {
System.err.println(e.getMessage());
}
// 官方提供的标准处理代码
// & -- 按位与运算
// 如满足条件表达式,则说明图像加载出错
// statusAll(false) -- 返回媒体跟踪器跟踪的所有媒体状态,如图像未加载,也不会进行加载
if ((mediaTracker.statusAll(false) & MediaTracker.ERRORED) != ) {
System.err.println("图片加载出错...");
}
return image;
} /**
* 使用媒体追踪器加载多张图像(一维数组)
*
* @param mediaTracker
* 媒体追踪器
* @param images
* 待加载的一维数组中的图像
* @return 加载完毕的图像
*/
public static Image[] addImage(MediaTracker mediaTracker, Image[] images) {
for (int i = ; i < images.length; i++) {
mediaTracker.addImage(images[i], i);
}
try {
mediaTracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 官方提供的标准处理代码
// & -- 按位与运算
// 如满足条件表达式,则说明图像加载出错
// statusAll(false) -- 返回媒体跟踪器跟踪的所有媒体状态,如图像未加载,也不会进行加载
if ((mediaTracker.statusAll(false) & MediaTracker.ERRORED) != ) {
System.err.println("图片加载出错...");
}
return images;
} /**
* 使用媒体追踪器加载多张图像(二维数组)
*
* @param mediaTracker
* 媒体追踪器
* @param images
* 待加载的二维数组中的图像
* @return 加载完毕的图像
*/
public static Image[][] addImage(MediaTracker mediaTracker, Image[][] images) {
for (int i = ; i < images.length; i++) {
for (int j = ; j < images[i].length; j++) {
mediaTracker.addImage(images[i][j], i);
}
}
try {
mediaTracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 官方提供的标准处理代码
// & -- 按位与运算
// 如满足条件表达式,则说明图像加载出错
// statusAll(false) -- 返回媒体跟踪器跟踪的所有媒体状态,如图像未加载,也不会进行加载
if ((mediaTracker.statusAll(false) & MediaTracker.ERRORED) != ) {
System.err.println("图片加载出错...");
}
return images;
} /**
* 将传入的图片进行裁剪,裁剪后生成图像放入一维数组中保存,再进行图像加载。 通常用于裁剪所有图像在一行中的源图像
*
* @param img
* 待裁剪图像
* @param count
* 裁剪后的图像数量
* @param x
* 开始裁剪x坐标
* @param y
* 开始裁剪y坐标
* @param width
* 每次裁剪图像宽度
* @param height
* 每次裁剪图像高度
* @param changeX
* 每次裁剪需要改变的x坐标值
* @param mediaTracker
* 媒体追踪器
* @param component
* 用来创建裁剪后的每个图片对象的组件
* @return 裁剪完并加载到内存后的一维图片数组
*/
public static Image[] cutAndAddImage(Image img, int count, int x, int y,
int width, int height, int changeX, MediaTracker mediaTracker,
Component component) {
// 创建保存裁剪后图像的一维数组
Image[] images = new Image[count];
/* 循环裁剪图像 */
ImageProducer producer = img.getSource(); // 获取图像源
for (int i = ; i < count; i++) {
// 创建用于裁剪的图像过滤器
ImageFilter cropImageFilter = new CropImageFilter(x + i * changeX,
y, width, height);
// 裁剪源图像,将裁剪后的图像放入数组保存
images[i] = component.createImage(new FilteredImageSource(producer,
cropImageFilter));
} // 调用 使用媒体追踪器加载多张图像(一维数组) 的方法完成图像加载
return addImage(mediaTracker, images);
} /**
* 将传入的图片进行裁剪,裁剪后生成图像放入二维数组中保存,再进行图像加载 通常用于裁剪所有图像在多行多列中的源图像
*
* @param img
* 待裁剪图像
* @param rows
* 裁剪后的图像行数,即垂直方向上需要裁剪出的图片数量
* @param columns
* 裁剪后的图像列数,即水平方向上需要裁剪出的图片数量
* @param x
* 开始裁剪x坐标
* @param y
* 开始裁剪y坐标
* @param width
* 每次裁剪图像宽度
* @param height
* 每次裁剪图像高度
* @param changeX
* 每次裁剪需要改变的x坐标值
* @param changeY
* 每次裁剪需要改变的y坐标值
* @param mediaTracker
* 媒体追踪器
* @param component
* 用来创建裁剪后的每个图片对象的组件
* @return 裁剪完并加载到内存后的二维图片数组
*/
public static Image[][] cutAndAddImage(Image img, int rows, int columns,
int x, int y, int width, int height, int changeX, int changeY,
MediaTracker mediaTracker, Component component) {
// 创建剪裁后图像保存的二维数组
Image[][] images = new Image[rows][columns];
// 获取图像源
ImageProducer producer = img.getSource();
/* 循环剪裁图像 */
for (int i = ; i < rows; i++) {
for (int j = ; j < columns; j++) {
// 创建用于剪裁图像的过滤器
ImageFilter cropImageFilter = new CropImageFilter(x + j
* changeX, y + i * changeY, width, height);
// 剪裁源图像,保存剪裁后的图像
images[i][j] = component.createImage(new FilteredImageSource(
producer, cropImageFilter)); }
}
// 调用 使用媒体追踪器加载多张图像(二维数组) 的方法完成图像加载
return addImage(mediaTracker, images);
}
}
JAVA 图像操作辅助类的更多相关文章
- Java常用工具类之数据库操作辅助类DBUtil.java
package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- DateHelper.cs日期时间操作辅助类C#
//==================================================================== //** Copyright © classbao.com ...
- Java实现操作dos命令
java实现操作dos命令的两种方式 1.读取文件中的命令 package com; import java.io.InputStream; public class cmd { public sta ...
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- HT for Web基于HTML5的图像操作(三)
上篇采用了HTML5的Canvas的globalCompositeOperation属性达到了染色效果,其实CSS也提供了一些常规图像变化的设置参数,关于CSS的过滤器Filter设置可参考 http ...
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- Java CSV操作(导出和导入)
Java CSV操作(导出和导入) CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件 ...
- 2014 年10个最佳的PHP图像操作库
2014 年10个最佳的PHP图像操作库 Thomas Boutell 以及众多的开发者创造了以GD图形库闻名的一个图形软件库,用于动态的图形计算. GD提供了对于诸如C, Perl, Pytho ...
随机推荐
- JdbcTemplate详解
1.JdbcTemplate操作数据库 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中.同时,为了支 ...
- Spring框架事务支持模型的优势
全局事务 全局事务支持对多个事务性资源的操作,通常是关系型数据库和消息队列.应用服务器通过JTA管理全局性事务,API非常烦琐.UserTransaction通常需要从JNDI获取,意味着需要与JND ...
- Tmux入门教程
对于程序员来说效率绝对是最重要的,那我们今天就来介绍下一个能极大提高工作效率的软件Tmux. Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话.不仅如此,你还可以通过 Tmux 使终 ...
- visual studio code 中隐藏从 ts 文件生成的 js 文件和 map 文件
typescript 文件编译产生的 js 和 map 文件不需要手工编辑,打开[文件][首选项][工作区设置],放入以下代码: // 将设置放入此文件中以覆盖默认值和用户设置. { "fi ...
- asp.net core 的用户注册功能——Identity上手
首先请using这个类库. using Microsoft.AspNetCore.Identity; 这个类库老牛逼了,首先是包含了一个IdentityUser类.我们可以自己写一个User类继承Id ...
- BitAdminCore框架应用篇:(五)核心套件querySuite列的定义
索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...
- akka开发(一)HelloWorld
package com.hfi.helloakka; import akka.actor.ActorRef; import akka.actor.Props; import akka.actor.Un ...
- 「BZOJ1095」[ZJOI2007] Hide 捉迷藏
题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...
- Linux core 文件 gdb
http://blog.csdn.net/mr_chenping/article/details/13767609 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时 ...
- ubuntu 16.04 安装Tensorflow
ubuntu 16.04 安装Tensorflow(CPU) 安装python ubuntu 16.04自带python2.7,因此可以略过这一步 安装pip sudo apt-get install ...