gray3

  

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