Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用RGB像素值绘制直方图?_Java_Histogram - Fatal编程技术网

Java 如何使用RGB像素值绘制直方图?

Java 如何使用RGB像素值绘制直方图?,java,histogram,Java,Histogram,我正在netbeans平台上制作应用程序。我想画他的程序。我有红色、绿色和蓝色的图像像素。所以,请任何人告诉我,我怎么能用这个像素值绘制直方图?我的代码如下,其中我获取图像的红色、绿色和蓝色像素值 enter code here import java.awt.Component; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;

我正在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);

}
}
在此处输入代码
导入java.awt.Component;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类WalkImageTest10扩展组件{
公共静态void main(字符串[]foo)引发IOException{
WalkImageTest10 wa=新的WalkImageTest10();
}
公共空白打印像素argb(整数像素){
int alpha=(像素>>24)&0xff;
int red=(像素>>16)和0xff;
绿色整数=(像素>>8)&0xff;
蓝色整数=(像素)&0xff;
System.out.println(“argb:+alpha+”、“+red+”、“+green+”、“+blue”);
//系统输出打印项数(像素);
}
私有void marchThroughImage(BuffereImage图像){
int w=image.getWidth();
int h=image.getHeight();
整数像素;
系统输出打印项次(“宽度、高度:+w+”、“+h”);
对于(int i=0;i
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.image.buffereImage;
导入java.awt.image.RescaleOp;
导入java.io.IOException;
导入javax.media.jai.jai;
导入javax.media.jai.PlanarImage;
导入javax.swing.*;
公共类最终直方图扩展JPanel{
int[]bin=新int[256];
最终示波图(int[]pbins){
垃圾箱=垃圾箱;
重新油漆();
}
@凌驾
受保护组件(图形g){
//g、 抽绳();
对于(int i=0;i<256;i++){
System.out.println(“bin[“+i+”]=”+bin[i]);
g、 抽绳(200+i、300、200+i、300-(箱[i])/1000);
//g、 抽绳(200+i、200、200+i、200-(料仓[i])/1500);
//System.out.println(“bin[“+i+”]=”+bin[i]);
}
}
公共静态void main(字符串[]args)引发IOException{
JFrame=新JFrame();
框架。设置尺寸(500500);
int[]pbins=新int[256];
int[]sbins=新int[256];
PlanarImage image=JAI.create(“文件加载”、“图像12.tiff”);
BuffereImage bi=image.getasBuffereImage();
System.out.println(“tipe是”+bi.getType());
int[]像素=新的int[3];
int k=0;
颜色c=新颜色(k);
双d=0.0;
双d1;
对于(int x=0;x
即使更正了您的拼写错误,我也无法完全理解您的问题。你说“我已经有了红、绿、蓝三色的图像像素”是什么意思?先生/各位,我想说的是,我从图像中获取像素值,然后我想用像素值绘制图像的直方图,那么我如何绘制直方图呢?你是想绘制一个直方图,显示图像中红、蓝、绿像素的数量吗?我得到了红色,绿色
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);
   }
 }