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 ...
随机推荐
- java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)
编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接 ...
- 团队项目(第四周之一)—GG队
Alpha认领任务: 叶尚文:对应键盘监听结果的动画以及计算 于泽浩:制作背景gif图,并保证能在程序中循环播放 龙剑初:项目进度跟进及博客更新 杜婷萱:把图片结合起来,设置云朵透明度的变化 蔡晓晴: ...
- C# 如何防止重放攻击(转载)
转载地址:http://www.cnblogs.com/similar/p/6776921.html 重放攻击 重放攻击是指黑客通过抓包的方式,得到客户端的请求数据及请求连接,重复的向服务器发送请求的 ...
- 打开AVD时报”Data partition already in use. Changes will not persist!”
错误信息 WARNING: Data partition already in use. Changes will not persist! WARNING: SD Card image alread ...
- 第1章 敏捷思维—“互联网+”知识工作者必备的DNA
1.1 强化敏捷思维,落实“十三五”双创战略 史蒂夫·布兰克观察美国创业环境,提出创新生态四个方面:动机.管理工具.文化.基础建设,开创LLP创新创业模式. 1.2 现代敏捷管理发展趋势 1.敏捷 ...
- Git小技巧:VIM中如何填写注释信息
使用Git命令行工具的时候,经常一不小心就进入VIM界面,例如git commit没有填写任何描述信息.对于习惯了Windows可视化操作界面的用户,可能一下子会觉得无所适从,只能在键盘上一顿短按.下 ...
- CentOS7查看CPU个数
查看逻辑cpu个数:cat /proc/cpuinfo | grep "processor" | wc -l 查看物理cpu个数:cat /proc/cpuinfo | grep ...
- __setattr__,__getattr__
class A(object): def __setattr__(self, key, value): self.__dict__[key] = value def __getattr__(self, ...
- python小数的进位与舍去
一.基础知识准备 奇进偶舍,又称为四舍六入五成双规则.银行进位法(Banker's Rounding),是一种计数保留法,是一种数值修约规则.从统计学的角度,"奇进偶舍"比&q ...
- BZOJ 4517--[Sdoi2016]排列计数(乘法逆元)
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1727 Solved: 1067 Description ...