2

im は、netbeans プラットフォームでアプリを作成します。ヒストグラムを描きたいです。赤、緑、青の色の画像のピクセルがあります。ですから、このピクセル値を使用してヒストグラムをプロットするにはどうすればよいか教えてください。私のコードは以下にあり、画像の赤、緑、青のピクセル値を取ります。

 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);

}
}
4

1 に答える 1

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);
   }
 }
于 2012-04-11T15:58:08.247 に答える