Java获取图片中某一点的RGB

Java获取图片中某一点的RGB
之前我在ScreenDemo类中用generateSnapshot()方法实现了对 当前屏幕的截图,这里在原来的基础上增加了printPointRGB方法用于获取屏幕上的某一点的 RGB。
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


public  class ScreenDemo {
     public  static File generateSnapshot() {
         // File snapshotFile = new File("D:/" + System.currentTimeMillis() + ".jpg");
        File snapshotFile =  new File("D:/snapshot.jpg");
         int width = ( int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
         int height = ( int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
         try {
            Robot robot;
            robot =  new Robot();
            BufferedImage image = robot.createScreenCapture( new Rectangle(width, height)); 
            ImageIO.write(image, "jpg", snapshotFile);
        }  catch (Exception e) {
            e.printStackTrace();
        }
         return snapshotFile;  
    }
    
     /**
     * 取得图像上指定位置像素的 rgb 颜色分量。
     *
     * 
@param  image 源图像。
     * 
@param  x 图像上指定像素位置的 x 坐标。
     * 
@param  y 图像上指定像素位置的 y 坐标。
     * 
@return  返回包含 rgb 颜色分量值的数组。元素 index 由小到大分别对应 r,g,b。
     
*/
     public  static  int[] getRGB(BufferedImage image,  int x,  int y) {
         int[] rgb =  null;
 
         if (image !=  null && x < image.getWidth() && y < image.getHeight()) {
            rgb =  new  int[3];
             int pixel = image.getRGB(x, y);
            rgb[0] = (pixel & 0xff0000) >> 16;
            rgb[1] = (pixel & 0xff00) >> 8;
            rgb[2] = (pixel & 0xff);
        }
 
         return rgb;
    }
 
     /**
     * 将RGB转换为16进制Hex
     *
     * 
@param  r red颜色分量
     * 
@param  g green颜色分量
     * 
@param  b blue颜色分量
     * 
@return
     
*/
     public  static String toHex( int r,  int g,  int b) {
         return "#" + toHexValue(r) + toHexValue(g) + toHexValue(b);
    }
 
     private  static String toHexValue( int number) {
        StringBuilder builder =  new StringBuilder(Integer.toHexString(number & 0xff));
         while (builder.length() < 2) {
            builder.append("0");
        }
         return builder.toString().toUpperCase();
    }
    
     public  static  void printPointRGB( int x,  int y) {
         try {
            BufferedImage bi = ImageIO.read( new File("D:/snapshot.jpg"));
             int[] rgb = getRGB(bi, x, y);
            Color color =  new Color(rgb[0], rgb[1], rgb[2]);
            System.out.println("red = " + color.getRed());
            System.out.println("green = " + color.getGreen());
            System.out.println("blue = " + color.getBlue());
            System.out.println("hex = " + toHex(color.getRed(), color.getGreen(), color.getBlue()));
        }  catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
     public  static  void main(String[] args) {
        generateSnapshot();
        printPointRGB(100, 100);
    }
}

你可能感兴趣的:(Java获取图片中某一点的RGB)