2012-04-10 58 views
2

我在NetBeans平台上制作应用程序。我想绘制他的程序。我有红色,绿色和蓝色的图像像素。所以,请任何人向我诉说,我如何绘制直方图使用这个像素值?我的代码在下面,其中我采取图像的红色,绿色和蓝色像素值。如何绘制使用RGB像素值的直方图?

enter code here 



    import java.awt.Component; 
    import java.awt.image.BufferedImage; 
    import java.io.File; 
    import java.io.IOException; 
    import javax.imageio.ImageIO; 

     public class WalkImageTest10 extends Component { 

     public static void main(String[] foo) throws IOException { 
     WalkImageTest10 wa= new WalkImageTest10(); 
    } 

     public void printPixelARGB(int pixel) { 
     int alpha = (pixel >> 24) & 0xff; 
     int red = (pixel >> 16) & 0xff; 
     int green = (pixel >> 8) & 0xff; 
     int blue = (pixel) & 0xff; 

     System.out.println("argb: " + alpha + ", " + red + ", " + green + ", " + blue); 
     //System.out.println(pixel); 
    } 

    private void marchThroughImage(BufferedImage image) { 
    int w = image.getWidth(); 
     int h = image.getHeight(); 
     int pixel; 
     System.out.println("width, height: " + w + ", " + h); 

    for (int i = 0; i < h; i++) { 
    for (int j = 0; j < w; j++) { 
    //System.out.println("x,y: " + j + ", " + i); 
    pixel = image.getRGB(j, i); 
    printPixelARGB(pixel); 
     //System.out.println("value of K:"+k+ " value of pixel: " + pixel[j][i]); 
    } 
    } 
System.out.println("loop is completed"); 
} 

public WalkImageTest10() throws IOException { 
// this is an image of a white spot on a black background. 
// with the smoothing in the image it's of course not all black 
// and white 
BufferedImage image = 
ImageIO.read(new File("F:\\java\\aimages\\003.jpg")); 
marchThroughImage(image); 

} 
} 
+0

即使纠正你的拼写错误后,我不能完全明白你的问题。 “我已经有红色,绿色和蓝色的图像像素”是什么意思? – 2012-04-10 14:19:44

+0

sir/mem,我想说我从图像中获取像素值,然后我想使用像素值绘制该图像的直方图,那么如何绘制直方图? – Jay 2012-04-10 14:22:51

+0

您是否想要绘制直方图来显示图像中红色,蓝色和绿色像素的数量? – 2012-04-10 15:21:08

回答

3
import java.awt.Color; 
     import java.awt.Graphics; 
     import java.awt.image.BufferedImage; 
     import java.awt.image.RescaleOp; 
    import java.io.IOException; 
    import javax.media.jai.JAI; 
    import javax.media.jai.PlanarImage; 
     import javax.swing.*; 

    public class FinalHistogram extends JPanel { 

    int[] bins = new int[256]; 
    FinalHistogram(int[] pbins) { 
    bins = pbins; 
    repaint(); 
    } 

@Override 
protected void paintComponent(Graphics g) { 
    //g.drawLine(); 

    for (int i = 0; i < 256; i++) { 

     System.out.println("bin[" + i + "]===" + bins[i]); 
     g.drawLine(200 + i, 300, 200 + i, 300 - (bins[i])/1000); 
     //g.drawLine(200 + i, 200, 200 + i, 200-(bins[i])/1500); 

     // System.out.println("bin["+i+"]==="+bins[i]); 
    } 

    } 


    public static void main(String[] args) throws IOException { 
    JFrame frame = new JFrame(); 
    frame.setSize(500, 500); 
    int[] pbins = new int[256]; 
    int[] sbins = new int[256]; 
    PlanarImage image = JAI.create("fileload", "image12.tiff"); 
    BufferedImage bi = image.getAsBufferedImage();  
    System.out.println("tipe is   " + bi.getType()); 
    int[] pixel = new int[3]; 

    int k = 0; 
    Color c = new Color(k); 
    Double d = 0.0; 
    Double d1; 
    for (int x = 0; x < bi.getWidth(); x++) { 
     for (int y = 0; y < bi.getHeight(); y++) { 
      pixel = bi.getRaster().getPixel(x, y, new int[3]); 
      d=(0.2125*pixel[0])+(0.7154*pixel[1])+(0.072*pixel[2]); 
       k=(int) (d/256); 

      sbins[k]++; 
     } 

    } 
    System.out.println("copleted" + d + "--" + k); 
    JTabbedPane jtp=new JTabbedPane(); 
    ImageIcon im= new ImageIcon(bi); 
     //jtp.add("New image", new JLabel((im))); 
     jtp.addTab("Histogram",new FinalHistogram(sbins)); 
     frame.add(jtp); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 
}