zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Android应用视觉效果设计技巧
    Android实现图片缩放与旋转
    schema 对象的简单介绍
    Index Scans 索引扫描
    Oracle Database Transaction Isolation Levels 事务隔离级别
    第一篇博客,纪念一下,终于开通啦!
    Linux 开机引导流程
    springBoot中tomcat默认端口修改
    面向服务架构之RPC原理与实例
    vs2008中xlslib与libxls库的编译及使用
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/4514841.html
Copyright © 2011-2022 走看看