少女祈祷中...

1. 图像处理

关键类

  • 图形:Graph
    • java.awt 包
    • Java 2D库: Graphics2D, Line2D, Rectangle2D, Ellipse2D,Arc2D
    • Color, Stroke
  • 图像:Image
    • javax.imageio包
    • ImageIO, BufferedImage, ImageReader, ImageWriter

关键类描述

Java原生支持jpg, png, bmp, wbmp, gif

  • javax.imageio.ImageIO
    • 自动封装多种ImageReader和ImageWriter,读写图像文件
    • read 读取图片 write 写图片
  • java.awt.image.BufferedImage,图像在内存中的表示类
    • getHeight 获取高度
    • getWidth 获取宽度
  • 图像文件读写/截取/合并

图片读写

1
2
3
4
5
6
7
8
9
10
11
// ImageIO需要测试图片的类型,加载合适的ImageReader来读取图片,耗时更长
BufferedImage image = ImageIO.read(new File("c:/temp/ecnu.jpg"));

// 指定用jpg Reader来加载,速度会加快
Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = (ImageReader) readers.next();
ImageInputStream iis = ImageIO.createImageInputStream(new File("c:/temp/ecnu.jpg"));
reader.setInput(iis, true);

//复制(写)图片
ImageIO.write(image, "png", new File("c:/temp/ecnu.png"));

获取基础属性

1
2
System.out.println("Height: " + image.getHeight()); // 高度像素
System.out.println("Width: " + image.getWidth()); // 宽度像素

图像切割

1
2
3
4
5
6
7
// 定义一个矩形 并放入切割参数中
ImageReadParam param = reader.getDefaultReadParam();
Rectangle rect = new Rectangle(x, y, width, height);
param.setSourceRegion(rect);

//从源文件读取一个矩形大小的图像
BufferedImage bi = reader.read(0, param);

RGB

1
2
3
4
5
6
//从第一张图片中读取RGB
int[] firstRGB = new int[width1*height1];
firstRGB = imageOne.getRGB(0,0,width1,height1,firstRGB,0,width1);

//设置左半部分的RGB 从(0,0) 开始
imageNew.setRGB(0,0,width1,height1,firstRGB,0,width1);

统计图生成

  • 统计图
    • 柱状图/饼图/折线图
    • Java原生的Graphics 2D可以画,比较繁琐
    • 基于jFreeChart(www.jfree.org/jfreechart)可以快速实现统计图生成
      • 设定数据集
      • 调用ChartFactory生成图形