package com.szcentral.its.util; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; /** * 图形识别技术 * <a href="http://my.oschina.net/arthor" target="_blank" rel="nofollow">@author</a> marker * 时间:2012-4-6 * */ public class ImageUtil { /** * 扫描指定区域的RGB * 并将区域内的一定范围的RGB像素点替换为红色 * @param x1 图片起始X坐标 * @param y1 图片起始Y坐标 * @param x2 图片结束X坐标 * @param y2 图片结束Y坐标 * @param path 图片路径 * @return 修改图片RGB后的存储路径 * @throws IOException */ public static String replaceRGB(int x1,int x2,int y1,int y2,String path,String destPath) throws IOException{ BufferedImage bi = (BufferedImage)ImageIO.read(new File(path)); //扫描图片选定区域 for(int i=y1;i<y2;i++){ for(int j=x1;j<x2;j++){//行扫描 int dip = bi.getRGB(j, i); int red =(dip & 0xff0000) >> 16; int green =(dip & 0xff00) >> 8; int blue =(dip & 0xff); //判断RGB分量范围 偏黄的分量范围 if(red>=200&&green>100&&blue>60){ Color ss = new Color(red,50,50); int ssd = ss.getRGB(); bi.setRGB(j, i, ssd); } } } File newFile = new File(destPath); ImageIO.write(bi, "bmp", newFile); return path; } /** * 根据文件名判断文件是否为图片 * * * @param filePath 文件路径 * * @return {@code true}: 是<br>{@code false}: 否 */ public static boolean isImage(String filePath) { String path = filePath.toUpperCase(); return path.endsWith(".PNG") || path.endsWith(".JPG") || path.endsWith(".JPEG") || path.endsWith(".BMP") || path.endsWith(".GIF"); } public static void main(String[] args) throws IOException { ImageUtil.replaceRGB(100,150,663,763,"D:\\image\\1.bmp","D:\\imageA\\1.bmp"); } /*public static void main(String[] args) throws IOException { BufferedImage bi = (BufferedImage)ImageIO.read(new File("C://Users//TAN//Desktop//temp//电警抓拍图片泛黄//电警抓拍图片泛黄//1.bmp")); //获取图像的宽度和高度 int width = bi.getWidth(); int height = bi.getHeight(); //扫描图片 System.out.println(width+"*"+height); for(int i=bi.getMinX();i<height;i++){ for(int j=bi.getMinY();j<width;j++){//行扫描 int dip = bi.getRGB(j, i); int p=dip; int red =(dip & 0xff0000) >> 16; int green =(dip & 0xff00) >> 8; int blue =(dip & 0xff); if(green!=blue){ System.out.println(red+"|"+green+"|"+blue);//换行 } if(red>=230&&green>220&&blue>200){ System.out.println(red+"|"+green+"|"+blue+"{"+i+j+"}");//换行 Color ss = new Color(red,20,20); int ssd = ss.getRGB(); bi.setRGB(j, i, ssd); } } } for(int i=115;i<150;i++){ for(int j=679;j<714;j++){//行扫描 int dip = bi.getRGB(j, i); int p=dip; int red =(dip & 0xff0000) >> 16; int green =(dip & 0xff00) >> 8; int blue =(dip & 0xff); if(green!=blue){ System.out.println(red+"|"+green+"|"+blue);//换行 } if(red>=200&&green>100&&blue>60){ System.out.println(red+"|"+green+"|"+blue+"{"+i+","+j+"}");//换行 Color ss = new Color(red,50,50); int ssd = ss.getRGB(); bi.setRGB(j, i, ssd); } } } File newFile = new File("C://Users//TAN//Desktop//temp//电警抓拍图片泛黄//1.bmp"); ImageIO.write(bi, "bmp", newFile); }*/ }