@@ -16,8 +16,12 @@ public static void main(String[] args) {
1616 catch (IOException e ) { e .printStackTrace (System .out ); }
1717
1818 if (img != null ) {
19+ //display(img);
20+ img = toGrayScale (img );
21+ //img = toGrayScale2(img);
1922 display (img );
20- img = toGrayScale2 (img );
23+ img = pixelate (img );
24+ //img = pixelate2(img, 3);
2125 display (img );
2226 }
2327 }
@@ -34,6 +38,7 @@ public static void display (BufferedImage img) {
3438 frame .pack ();
3539 frame .setVisible (true );
3640 }
41+
3742 // convert image to grayscale
3843 public static BufferedImage toGrayScale (BufferedImage img ) {
3944 System .out .println (" Converting to GrayScale." );
@@ -44,24 +49,73 @@ public static BufferedImage toGrayScale (BufferedImage img) {
4449 g .dispose ();
4550 return grayImage ;
4651 }
52+
4753 public static BufferedImage toGrayScale2 (BufferedImage img ) {
4854 System .out .println (" Converting to GrayScale2." );
4955 BufferedImage grayImage = new BufferedImage (
5056 img .getWidth (), img .getHeight (), BufferedImage .TYPE_BYTE_GRAY );
51- int p = 0 , rgb =0 , r =0 , g =0 , b =0 ;
52- for (int y =0 ; y <img .getHeight ()- 1 ; y ++) {
53- for (int x =0 ; x <img .getWidth ()- 1 ; x ++) {
57+ int rgb =0 , r =0 , g =0 , b =0 ;
58+ for (int y =0 ; y <img .getHeight (); y ++) {
59+ for (int x =0 ; x <img .getWidth (); x ++) {
5460 rgb = (int )(img .getRGB (x , y ));
5561 r = ((rgb >> 16 ) & 0xFF );
5662 g = ((rgb >> 8 ) & 0xFF );
5763 b = (rgb & 0xFF );
58- p = (int )(0.2126 * r + 0.7152 * g + 0.0722 * b );
59- p = (255 <<24 ) | (p <<16 ) | (p <<8 ) | p ;
60- grayImage .setRGB (x ,y ,p );
64+ rgb = (int )((r +g +b )/3 );
65+ //rgb = (int)(0.299 * r + 0.587 * g + 0.114 * b);
66+ rgb = (255 <<24 ) | (rgb <<16 ) | (rgb <<8 ) | rgb ;
67+ grayImage .setRGB (x ,y ,rgb );
6168 }
6269 }
6370 return grayImage ;
6471 }
72+
73+ // apply 2x2 pixelation to a grayscale image
74+ public static BufferedImage pixelate (BufferedImage img ) {
75+ BufferedImage pixImg = new BufferedImage (
76+ img .getWidth (), img .getHeight (), BufferedImage .TYPE_BYTE_GRAY );
77+ int pix = 0 , p =0 ;
78+ for (int y =0 ; y <img .getHeight ()-2 ; y +=2 ) {
79+ for (int x =0 ; x <img .getWidth ()-2 ; x +=2 ) {
80+ pix = (int )((img .getRGB (x , y )& 0xFF )
81+ + (img .getRGB (x +1 , y )& 0xFF )
82+ + (img .getRGB (x , y +1 )& 0xFF )
83+ + (img .getRGB (x +1 , y +1 )& 0xFF ))/4 ;
84+ p = (255 <<24 ) | (pix <<16 ) | (pix <<8 ) | pix ;
85+ pixImg .setRGB (x ,y ,p );
86+ pixImg .setRGB (x +1 ,y ,p );
87+ pixImg .setRGB (x ,y +1 ,p );
88+ pixImg .setRGB (x +1 ,y +1 ,p );
89+ }
90+ }
91+ return pixImg ;
92+ }
93+
94+ // apply nxn pixelation to a grayscale image
95+ public static BufferedImage pixelate2 (BufferedImage img , int n ) {
96+ BufferedImage pixImg = new BufferedImage (
97+ img .getWidth (), img .getHeight (), BufferedImage .TYPE_BYTE_GRAY );
98+ int pix = 0 , p =0 ;
99+ for (int y =0 ; y <img .getHeight ()-n ; y +=n ) {
100+ for (int x =0 ; x <img .getWidth ()-n ; x +=n ) {
101+ for (int a =0 ; a <n ; a ++) {
102+ for (int b =0 ; b <n ; b ++) {
103+ pix += (img .getRGB (x +a , y +b )& 0xFF );
104+ }
105+ }
106+ pix = (int )(pix /n /n );
107+ for (int a =0 ; a <n ; a ++) {
108+ for (int b =0 ; b <n ; b ++) {
109+ p = (255 <<24 ) | (pix <<16 ) | (pix <<8 ) | pix ;
110+ pixImg .setRGB (x +a ,y +b ,p );
111+ }
112+ }
113+ pix = 0 ;
114+ }
115+ }
116+ return pixImg ;
117+ }
118+
65119}
66120
67121
0 commit comments