C:\class15>java gray3 Elapsed time 59.6951 milliseconds 327 x 215 Area 0.0703050 megapixels Time per megapixel 849.087 milliseconds C:\class15>java gray3 Elapsed time 59.3069 milliseconds 327 x 215 Area 0.0703050 megapixels Time per megapixel 843.565 milliseconds
gray3.java
import java.awt.*; import java.awt.image.*; import java.awt.color.*; import java.io.*; import javax.imageio.*; import javax.swing.*; public class gray3 { public static void main(String [] args) { String filename = "bld.jpg"; if (args.length>0) filename = args[0]; showImage f1 = new showImage(filename); f1.setLocation(100,100); f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); int w = f1.getWidth(); int h = f1.getHeight(); long start = System.nanoTime(); BufferedImage grayImage = rgb2gray(f1.img); long etime = System.nanoTime() - start; double elapsed_time = 1e-6*(double)etime; System.out.format("Elapsed time %g milliseconds%n",elapsed_time); double area = f1.img.getWidth()*f1.img.getHeight()*1e-6; System.out.format("%d x %d Area %g megapixels%n",f1.img.getWidth(), f1.img.getHeight(), area); System.out.format("Time per megapixel %g milliseconds%n",elapsed_time/area); showImage f2 = new showImage(grayImage,"gray version"); f2.setLocation(120+w,100); f2.writeImage("gray","png"); } public static BufferedImage rgb2gray(BufferedImage img) { int w1 = img.getWidth(); int h1 = img.getHeight(); // int value[][] = new int[w1][h1]; int type = BufferedImage.TYPE_INT_RGB; BufferedImage gray = new BufferedImage(w1, h1, type);// new image int v, r, g, b; int value[] = new int[w1]; for (int j = 0; j < h1; j++) { img.getRGB(0, j, w1, 1, value, 0, w1); // read and store pixel value for (int i = 0; i < w1; i++) { v = value[i]; r = (v >> 16) & 0xFF; g = (v >> 8) & 0xFF; b = v & 0xFF; v = (r + g + b) / 3; // grey by averaging the pixels value[i] = 0xFF000000 | (v << 16) | (v << 8) | v; } gray.setRGB(0, j, w1, 1, value, 0, w1); } return gray; } }
Maintained by John Loomis, updated Sat Oct 12 20:43:27 2013