import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.*;
public class image extends Frame
{
 public  static int w,h;  
 public static int ipixels[];
 Image Buf,img=null;
      
     public void initVal(){  
         String path="D:\\image\\79.jpg";
     img=this.getToolkit().getImage(path);   
         w=img.getWidth(null);
         h=img.getHeight(null);        
         ipixels=new int[w*h];            
         PixelGrabber pg = new PixelGrabber(img, 0, 0, w,h, ipixels, 0, w);//将RGB像素值存入ipixels
         
    }
    /*获取灰度值*/
    public static double[] getGrayValue(){
        double grayValue[] = new double[ipixels.length];
            for ( int i = 0; i < ipixels.length; i++ ){
                int r = (ipixels[i] >> 16)& 0xff;
                int g = (ipixels[i] >> 8 )& 0xff;
                int b = (ipixels[i]      )& 0xff;
                grayValue[i] =  0.2990 * r + 0.5870 * g + 0.1140 * b;
            }
            return grayValue;
    }
     public void showImage()
     {
      Image pic=createImage(new MemoryImageSource(w,h,grayValue,0,w));
        Buf.getGraphics().drawImage(pic,0,0,this); //显示黑白图片;
     }
      public  void showGrayArrayImg(int[] grayArray,int w,int h){
         for(int i=0;i<grayArray.length;i++) {
            grayArray[i]=(255<<24)|(grayArray[i]<<16)|(grayArray[i]<<8)|grayArray[i];
        }
        Image im= createImage((ImageProducer)new MemoryImageSource(w,h,grayArray,0,w));
        
    }
    
public static void main(String[] args) 
{
     image my=new image();
     my.initVal();
     my.getGrayValue();
     my.showImage();
}
}

解决方案 »

  1.   

    不用自己处理像素,Java 2D提供了API。下面是个例子。package mobi.chenwei.test;import java.awt.RenderingHints;
    import java.awt.color.ColorSpace;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorConvertOp;
    import java.io.File;
    import java.io.IOException;import javax.imageio.ImageIO;public class GrayTest {
    public static void main(String[] args) {
    BufferedImage image;
    try {
    image = ImageIO.read(new File("test.jpg"));
    ImageIO.write(transformGrayJ2D(image, null), "jpg",
    new File("gray.jpg"));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    public static BufferedImage transformGrayJ2D(BufferedImage srcImage,
    RenderingHints hints) {
    BufferedImage dstImage = new BufferedImage(srcImage.getWidth(),
    srcImage.getHeight(), srcImage.getType()); ColorSpace grayCS = ColorSpace.getInstance(ColorSpace.CS_GRAY);
    ColorConvertOp colorConvertOp = new ColorConvertOp(grayCS, hints);
    colorConvertOp.filter(srcImage, dstImage); return dstImage;
    }
    }