MOOC 个人学习笔记

# 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 获取宽度
  • 图像文件读写 / 截取 / 合并

# 图片读写

// 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"));

# 获取基础属性

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

# 图像切割

// 定义一个矩形 并放入切割参数中
ImageReadParam param = reader.getDefaultReadParam();            
Rectangle rect = new Rectangle(x, y, width, height);            
param.setSourceRegion(rect);
// 从源文件读取一个矩形大小的图像
BufferedImage bi = reader.read(0, param);

# RGB

// 从第一张图片中读取 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 生成图形