画像からヒストグラムを作りたいのですが
画像からヒストグラムを計算し、それをグラフにしてあらわしたいと思っています。プログラムは以下のようなところまでできており、TextFieldにファイル名を入力し、EnterkeyもしくはOpenを押すと左下にその画像が表示されるところまでできています。
Startを押すと、その画像のRGBヒストグラムを計算し、赤、緑、青各色のグラフを三つ右下に表示したいのですがGraphicsの使い方や、BufferedImageの使い方がわからず四苦八苦しております。ヒストグラムをしては横区間を16としてやりたいと思っております。自分なりにはヒストグラム値を16で割り、その数値をもとにGraphicsオブジェクトに与えてそれをもとに描写するという方向で作成していましたがわたくしには難しく頓挫してしまいました。どうぞよろしくお願いいたします。
/*ここからソース*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.io.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static class ActionB1 implements ActionListener {
JTextField input;
JLabel pict1;
JFrame frame2;
public ActionB1(JTextField input0,JLabel pict10,JFrame A0){
input =input0;
pict1=pict10;
frame2 = A0;
}
public void actionPerformed(ActionEvent e){
if(getClass().getResource(input.getText())==null){
pict1.setText("file not found!!!");
}
else {
ImageIcon temp =new ImageIcon(getClass().getResource(input.getText()));
pict1.setIcon(temp);
}
pict1.repaint();
}
}
public static class ActionB2 implements ActionListener{
JLabel pict2;
JTextField input;
JFrame frame3;
public ActionB2(JTextField input0,JLabel pict20,JFrame A0){
input =input0;
pict2=pict20;
frame3=A0;
}
public void actionPerformed(ActionEvent e){
File filename = new File(input.getText());
BufferedImage Image = null;
try {
Image = ImageIO.read(filename);
} catch (IOException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
//ここからわかりません
}
public static void main(String[] args){
JFrame frame =new JFrame("タイトル");
frame.setSize(600,400);
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JButton b1 =new JButton("OPEN"),b2=new JButton("START");
JTextField t1 = new JTextField(30);
p1.add(t1);
p1.add(b1);
p1.add(b2);
b1.setBounds(350,10,100,20);
b2.setBounds(460,10,100,20);
t1.setBounds(110,10,230,20);
p1.setBounds(20,10,80,20);
frame.getContentPane().add(b1);
frame.getContentPane().add(b2);
frame.getContentPane().add(t1);
frame.getContentPane().add(p1);
p2.setLayout(new GridLayout(1,2));
JLabel pict1= new JLabel(),pict2= new JLabel();
p2.add(pict1);
p2.add(pict2);
ActionB1 actB1 = new ActionB1(t1,pict1,frame);
ActionB2 actB2 = new ActionB2(t1,pict2,frame);
b1.addActionListener(actB1);
b2.addActionListener(actB2);
t1.addActionListener(actB1);
frame.getContentPane().add(p1,BorderLayout.NORTH);
frame.getContentPane().add(p2,BorderLayout.CENTER);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
お礼
お返事ありがとうございます。無理な気がしてましたがやはりそうでしたか。今度からはSwingを使おうと思います。