JAVA 图像操作辅助类

  1 package util;
  2
  3 import java.awt.Component;
  4 import java.awt.Image;
  5 import java.awt.MediaTracker;
  6 import java.awt.image.CropImageFilter;
  7 import java.awt.image.FilteredImageSource;
  8 import java.awt.image.ImageFilter;
  9 import java.awt.image.ImageProducer;
 10
 11 /**
 12  * 图像操作辅助类
 13  *
 14  * @author hellokitty燕
 15  *
 16  */
 17 public class ImageUtils {
 18
 19     private ImageUtils() {
 20     }
 21
 22     /**
 23      * 使用媒体追踪器加载单张图像
 24      *
 25      * @param mediaTracker
 26      *            媒体追踪器
 27      * @param image
 28      *            待加载图像
 29      * @return 加载完毕的图像
 30      */
 31     public static Image addImage(MediaTracker mediaTracker, Image image) {
 32         // 将图片放置到媒体追踪器的图片列表中,准备开始加载工作
 33         mediaTracker.addImage(image, 0);
 34         try {
 35             // 加载所有图片
 36             mediaTracker.waitForAll();
 37         } catch (InterruptedException e) {
 38             System.err.println(e.getMessage());
 39         }
 40         // 官方提供的标准处理代码
 41         // & -- 按位与运算
 42         // 如满足条件表达式,则说明图像加载出错
 43         // statusAll(false) -- 返回媒体跟踪器跟踪的所有媒体状态,如图像未加载,也不会进行加载
 44         if ((mediaTracker.statusAll(false) & MediaTracker.ERRORED) != 0) {
 45             System.err.println("图片加载出错...");
 46         }
 47         return image;
 48     }
 49
 50     /**
 51      * 使用媒体追踪器加载多张图像(一维数组)
 52      *
 53      * @param mediaTracker
 54      *            媒体追踪器
 55      * @param images
 56      *            待加载的一维数组中的图像
 57      * @return 加载完毕的图像
 58      */
 59     public static Image[] addImage(MediaTracker mediaTracker, Image[] images) {
 60         for (int i = 0; i < images.length; i++) {
 61             mediaTracker.addImage(images[i], i);
 62         }
 63         try {
 64             mediaTracker.waitForAll();
 65         } catch (InterruptedException e) {
 66             e.printStackTrace();
 67         }
 68         // 官方提供的标准处理代码
 69         // & -- 按位与运算
 70         // 如满足条件表达式,则说明图像加载出错
 71         // statusAll(false) -- 返回媒体跟踪器跟踪的所有媒体状态,如图像未加载,也不会进行加载
 72         if ((mediaTracker.statusAll(false) & MediaTracker.ERRORED) != 0) {
 73             System.err.println("图片加载出错...");
 74         }
 75         return images;
 76     }
 77
 78     /**
 79      * 使用媒体追踪器加载多张图像(二维数组)
 80      *
 81      * @param mediaTracker
 82      *            媒体追踪器
 83      * @param images
 84      *            待加载的二维数组中的图像
 85      * @return 加载完毕的图像
 86      */
 87     public static Image[][] addImage(MediaTracker mediaTracker, Image[][] images) {
 88         for (int i = 0; i < images.length; i++) {
 89             for (int j = 0; j < images[i].length; j++) {
 90                 mediaTracker.addImage(images[i][j], i);
 91             }
 92         }
 93         try {
 94             mediaTracker.waitForAll();
 95         } catch (InterruptedException e) {
 96             e.printStackTrace();
 97         }
 98         // 官方提供的标准处理代码
 99         // & -- 按位与运算
100         // 如满足条件表达式,则说明图像加载出错
101         // statusAll(false) -- 返回媒体跟踪器跟踪的所有媒体状态,如图像未加载,也不会进行加载
102         if ((mediaTracker.statusAll(false) & MediaTracker.ERRORED) != 0) {
103             System.err.println("图片加载出错...");
104         }
105         return images;
106     }
107
108     /**
109      * 将传入的图片进行裁剪,裁剪后生成图像放入一维数组中保存,再进行图像加载。 通常用于裁剪所有图像在一行中的源图像
110      *
111      * @param img
112      *            待裁剪图像
113      * @param count
114      *            裁剪后的图像数量
115      * @param x
116      *            开始裁剪x坐标
117      * @param y
118      *            开始裁剪y坐标
119      * @param width
120      *            每次裁剪图像宽度
121      * @param height
122      *            每次裁剪图像高度
123      * @param changeX
124      *            每次裁剪需要改变的x坐标值
125      * @param mediaTracker
126      *            媒体追踪器
127      * @param component
128      *            用来创建裁剪后的每个图片对象的组件
129      * @return 裁剪完并加载到内存后的一维图片数组
130      */
131     public static Image[] cutAndAddImage(Image img, int count, int x, int y,
132             int width, int height, int changeX, MediaTracker mediaTracker,
133             Component component) {
134         // 创建保存裁剪后图像的一维数组
135         Image[] images = new Image[count];
136         /* 循环裁剪图像 */
137         ImageProducer producer = img.getSource(); // 获取图像源
138         for (int i = 0; i < count; i++) {
139             // 创建用于裁剪的图像过滤器
140             ImageFilter cropImageFilter = new CropImageFilter(x + i * changeX,
141                     y, width, height);
142             // 裁剪源图像,将裁剪后的图像放入数组保存
143             images[i] = component.createImage(new FilteredImageSource(producer,
144                     cropImageFilter));
145         }
146
147         // 调用 使用媒体追踪器加载多张图像(一维数组) 的方法完成图像加载
148         return addImage(mediaTracker, images);
149     }
150
151     /**
152      * 将传入的图片进行裁剪,裁剪后生成图像放入二维数组中保存,再进行图像加载 通常用于裁剪所有图像在多行多列中的源图像
153      *
154      * @param img
155      *            待裁剪图像
156      * @param rows
157      *            裁剪后的图像行数,即垂直方向上需要裁剪出的图片数量
158      * @param columns
159      *            裁剪后的图像列数,即水平方向上需要裁剪出的图片数量
160      * @param x
161      *            开始裁剪x坐标
162      * @param y
163      *            开始裁剪y坐标
164      * @param width
165      *            每次裁剪图像宽度
166      * @param height
167      *            每次裁剪图像高度
168      * @param changeX
169      *            每次裁剪需要改变的x坐标值
170      * @param changeY
171      *            每次裁剪需要改变的y坐标值
172      * @param mediaTracker
173      *            媒体追踪器
174      * @param component
175      *            用来创建裁剪后的每个图片对象的组件
176      * @return 裁剪完并加载到内存后的二维图片数组
177      */
178     public static Image[][] cutAndAddImage(Image img, int rows, int columns,
179             int x, int y, int width, int height, int changeX, int changeY,
180             MediaTracker mediaTracker, Component component) {
181         // 创建剪裁后图像保存的二维数组
182         Image[][] images = new Image[rows][columns];
183         // 获取图像源
184         ImageProducer producer = img.getSource();
185         /* 循环剪裁图像 */
186         for (int i = 0; i < rows; i++) {
187             for (int j = 0; j < columns; j++) {
188                 // 创建用于剪裁图像的过滤器
189                 ImageFilter cropImageFilter = new CropImageFilter(x + j
190                         * changeX, y + i * changeY, width, height);
191                 // 剪裁源图像,保存剪裁后的图像
192                 images[i][j] = component.createImage(new FilteredImageSource(
193                         producer, cropImageFilter));
194
195             }
196         }
197         // 调用 使用媒体追踪器加载多张图像(二维数组) 的方法完成图像加载
198         return addImage(mediaTracker, images);
199     }
200 }
时间: 2024-10-11 08:11:46

JAVA 图像操作辅助类的相关文章

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

OpenCV(C++接口)学习笔记2-像素级的图像操作

1.通过成员函数at(int y, int x)访问 这种方法需要知道像素保存的格式. (1) 这是为模板类型的函数,因为一个函数的返回类型只有在运行时才会知道. (2)这个函数返回的是一个向量即Vector,故有下标的操作. image.at<uchar>(j,i)= 255; 在单通道图像中,采用以上语句可以获取图像(i,j)处的灰度值(注:先行后列,一般用j表示行(rows),i表示列(cols)).如果是灰度图像的话,只需要更改一个数据就可以了.如果是rgb图像的话,就要用"

JAVA批处理操作

批处理,可以大幅度提升大量增.删.改的速度,就是对大数据操作有很大的效率提升. 与上篇文章中提到的"连接池"相似.其实就是先将多次操作(增删改)打包,然后再一次发送执行 主要用到两个方法: ?  打包:PreparedStatement.addBatch(); ?  发送.执行:PreparedStatement.executeBatch(); 下面看做同一件事,用批处理和不用批处理的效率对比,源码如下: import java.sql.Connection; import java.

Java File操作汇总

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/41223841 本文通过大量的示例,介绍和讲解了Java File操作. 1)创建文件  2)删除文件  3)判断文件是否存在  4)创建文件夹  5)文件类型判断  6)获取文件信息 7)获取目录下文件名  8)递归打印所有文件名  9)递归删除整个文件夹  10)Properties类 11)SequenceInputStream类:连接多个流  12)对象序列化实现Ser

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

《学习opencv》笔记——矩阵和图像操作——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

矩阵和图像的操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 double alpha,//1号矩阵系数 const CvArr* src3,//加权矩阵 double beta,//2号矩阵系数 CvArr* dst,//结果矩阵 int tABC = 0//变换标记 ); tABC变换标记及其对应的含义 CV_GEMM_A_T 转置 src1 CV_GE

Java字节流操作

在java.io包中得操作主要有字节流与字符流两大类,两个类都有输入输出操作. 在字节流中,输出数据主要使用OutputStream类,输入使用的InputStream类. 在字符流中,输出数据使用Writer,输入数据使用Reader. 在Java中IO操作有相应的步骤,以文件的操作为例. (1)使用File类打开一个文件 (2)通过字节流或字符流的子类指定输出的位置. (3)进行读/写操作 (4)关闭输入/输出 字符流与字节流的区别: 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi

学习笔记TF015:加载图像、图像格式、图像操作、颜色

TensorFlow支持JPG.PNG图像格式,RGB.RGBA颜色空间.图像用与图像尺寸相同(height*width*chnanel)张量表示.通道表示为包含每个通道颜色数量标量秩1张量.图像所有像素存在磁盘文件,需要被加载到内存. 图像加载与二进制文件相同.图像需要解码.输入生成器(tf.train.string_input_producer)找到所需文件,加载到队列.tf.WholeFileReader加载完整图像文件到内存,WholeFileReader.read读取图像,tf.ima