package test ; import java. awt. Color ;
import java. awt. image. BufferedImage ;
import java. io. File ;
import java. io. FileOutputStream ;
import java. io. IOException ;
import java. io. OutputStream ; import javax. imageio. ImageIO ; public class MyImage { public static void analyseRGB ( String filePath, String newFilePath, int type) { OutputStream output = null ; try { BufferedImage img = ImageIO . read ( new File ( filePath) ) ; int imageType = img. getType ( ) ; int width = img. getWidth ( ) ; int height = img. getHeight ( ) ; int startX = 0 ; int startY = 0 ; int offset = 0 ; int scansize = width; int dd = width - startX; int hh = height - startY; int x0 = width / 2 ; int y0 = height / 2 ; System . out. println ( "dd:" + dd + " hh:" + hh) ; System . out. println ( "width:" + width + " height:" + height) ; System . out. println ( "imageType:" + imageType) ; System . out. println ( "size:" + ( offset + hh * scansize + dd) ) ; int [ ] rgbArray = new int [ offset + hh * scansize + dd] ; int [ ] newArray = new int [ offset + hh * scansize + dd] ; img. getRGB ( startX, startY, width, height, rgbArray, offset, scansize) ; int count= 0 ; for ( int i : rgbArray) { System . out. println ( i) ; if ( i!= 0 ) { count= count+ 1 ; } } System . out. println ( count) ; int rgb = rgbArray[ offset + ( y0 - startY) * scansize+ ( x0 - startX) ] ; Color c = new Color ( rgb) ; System . out. println ( "中间像素点的rgb:" + c) ; for ( int i = 0 ; i < height - startY; i++ ) { for ( int j = 0 ; j < width - startX; j++ ) { c = new Color ( rgbArray[ offset+ i * scansize + j] ) ; switch ( type) { case 1 : / / 红色灰度图片newArray[ i* dd + j] = new Color ( c. getRed ( ) , 0 , 0 ) . getRGB ( ) ; break ; case 2 : / / 绿色灰度图片newArray[ i* dd + j] = new Color ( 0 , c. getGreen ( ) , 0 ) . getRGB ( ) ; break ; case 3 : / / 蓝色灰度图片newArray[ i * dd + j] = new Color ( 0 , 0 , c. getBlue ( ) ) . getRGB ( ) ; break ; default : break ; } } } File out = new File ( newFilePath) ; if ( ! out. exists ( ) ) out. createNewFile ( ) ; output = new FileOutputStream ( out) ; BufferedImage imgOut = new BufferedImage ( width, height, BufferedImage . TYPE_3BYTE_BGR) ; imgOut. setRGB ( startX, startY, width, height, newArray, offset, scansize) ; ImageIO . write ( imgOut, "jpg" , output) ; } catch ( IOException e) { e. printStackTrace ( ) ; } }
}