プロが教える店舗&オフィスのセキュリティ対策術

画像からヒストグラムを計算し、それをグラフにしてあらわしたいと思っています。プログラムは以下のようなところまでできており、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);
}
}

A 回答 (2件)

>画像からヒストグラム


これだけでは、画像のどんなデータを取り出してどのように集計したいのかも解らないので、アルゴリズムも考えようが無いです。

この回答への補足

説明が足りていませんでした。
jpg,gifなどのファイルのパスを入力し、Fileクラスのインスタンスを作成してそれをもとにBufferedImageクラスのインスタンスを作成してそこから赤、緑、青各色のヒストグラムを計算してそれをパネルに貼り付けたいと思っております。getRGBを用いてRGBの値を手に入れたいのですがgetRGBの使い方もよくわかっておりません。
それをもとにGraphicsを用いて描写したいとおもっております。
なにとぞよろしくおねがいします。

補足日時:2007/10/19 13:25
    • good
    • 0

>Graphicsの使い方や、BufferedImageの使い方がわからず四苦八苦しております。


>わたくしには難しく頓挫してしまいました。
GraphicsやBufferedImageの使い方のどの点がわからないのですか?
どこが難しくて頓挫してしまったのですか?
どのような回答を期待していますか?
質問の内容を絞って頂けないと回答のしようがありませんよ。

この回答への補足

すいません。質問の内容が不十分でした。

GraphicsやBufferedImageの使い方もわかりませんがそれよりも
このプログラムを作るにあたってアルゴリズムもどうすればいいか全くわかりません。
できればソースを作っていただいて教えていただきたいと思っております。

補足日時:2007/10/18 03:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!