質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

imageで読み込んだ画像を何回も読むことは可能?

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 392

yasu_abu7

score 12

簡単な質問かもしれませんが、質問します。
たとえば、撮影ボタンを押して保存される画像をimageで一回読み込みます。それを保存されるたびに一回ずつ読み込むことは可能なのでしょうか?(合計4回読み込む予定)
追記

public class GazouinputStrream extends JFrame{
    static int x[] = {205,260,320,390,440,265,320,380,320};
    static int y[] = {165,195,170,185,165,270,290,270,360};

    int x1[] = {425,395,455,425};
    int y1[] = {510,450,450,510};
    int x2[] = {365,395,425,365};
    int y2[] = {390,450,390,390};
    int x3[] = {395,425,455,395};
    int y3[] = {450,390,450,450};
    int x4[] = {425,455,485,425};
    int y4[] = {390,450,390,390};
    int x5[] = {335,365,395,335};
    int y5[] = {330,390,330,330};
    int x6[] = {365,395,425,365};
    int y6[] = {390,330,390,390};
    int x7[] = {395,425,455,395};
    int y7[] = {330,390,330,330};
    int x8[] = {425,455,485,425};
    int y8[] = {390,330,390,390};
    int x9[] = {455,485,515,455};
    int y9[] = {330,390,330,330};
    int x10[] = {335,365,395,335};
    int y10[] = {330-2,270-2,330-2,330-2};
    int x11[] = {365,395,425,365};
    int y11[] = {270-2,330-2,270-2,270-2};
    int x12[] = {395,425,455,395};
    int y12[] = {330-2,270-2,330-2,330-2};
    int x13[] = {425,455,485,425};
    int y13[] = {270-2,330-2,270-2,270-2};
    int x14[] = {455,485,515,455};
    int y14[] = {330-2,270-2,330-2,330-2};
    int x15[] = {365,395,425,365};
    int y15[] = {270-2,210-2,270-2,270-2};
    int x16[] = {395,425,455,395};
    int y16[] = {210-2,270-2,210-2,210-2};
    int x17[] = {425,455,485,425};
    int y17[] = {270-2,210-2,270-2,270-2};
    int x18[] = {395,425,455,395};
    int y18[] = {210-2,150-2,210-2,210-2};
    int x19[] = {515+1,485+1,545+1,515+1};
    int y19[] = {330,390,390,330};
    int x20[] = {485+1,515+1,545+1,485+1};
    int y20[] = {390,450,390,390};
    int x21[] = {455+1,485+1,515+1,455+1};
    int y21[] = {450,390,450,450};
    int x22[] = {455+1,485+1,515+1,455+1};
    int y22[] = {450,510,450,450};
    int x23[] = {425+1,455+1,485+1,425+1};
    int y23[] = {510,450,510,510};
    int x24[] = {515+1,545+1,575+1,515+1};
    int y24[] = {450,390,450,450};
    int x25[] = {515+1,545+1,575+1,515+1};
    int y25[] = {450,510,450,450};
    int x26[] = {485+1,515+1,545+1,485+1};
    int y26[] = {510,450,510,510};
    int x27[] = {545+1,575+1,605+1,545+1};
    int y27[] = {510,450,510,510};
    int x28[] = {395-1,365-1,425-1,395-1};
    int y28[] = {450,510,510,450};
    int x29[] = {335-1,365-1,395-1,335-1};
    int y29[] = {450,510,450,450};
    int x30[] = {335-1,365-1,395-1,335-1};
    int y30[] = {450,390,450,450};
    int x31[] = {305-1,335-1,365-1,305-1};
    int y31[] = {390,450,390,390};
    int x32[] = {305-1,335-1,365-1,305-1};
    int y32[] = {390,330,390,390};
    int x33[] = {275-1,305-1,335-1,275-1};
    int y33[] = {450,390,450,450};
    int x34[] = {275-1,305-1,335-1,275-1};
    int y34[] = {450,510,450,450};
    int x35[] = {305-1,335-1,365-1,305-1};
    int y35[] = {510,450,510,510};
    int x36[] = {245-1,275-1,305-1,245-1};
    int y36[] = {510,450,510,510};

    BufferedImage read = null;
    BufferedImage read1 = null;
    BufferedImage read2 = null;
    BufferedImage read3 = null;

    BufferedImage image;
    BufferedImage imagehairetu[]={};

    public static void main(String[] args) throws IOException {
        GazouinputStrream frame = new GazouinputStrream("画像読み込み");
        frame.setVisible(true);
        frame.setBounds(100, 100,700 ,700);
    }
    GazouinputStrream(String title) throws IOException{
        super();
        setTitle(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel(){
            public void paintComponent(Graphics g){            
                    g.drawPolygon(x1, y1, 4);
                    g.drawPolygon(x2, y2, 4);
                    g.drawPolygon(x3, y3, 4);
                    g.drawPolygon(x4, y4, 4);
                    g.drawPolygon(x5, y5, 4);
                    g.drawPolygon(x6, y6, 4);
                    g.drawPolygon(x7, y7, 4);
                    g.drawPolygon(x8, y8, 4);
                    g.drawPolygon(x9, y9, 4);
                    g.drawPolygon(x10, y10, 4);
                    g.drawPolygon(x11, y11, 4);
                    g.drawPolygon(x12, y12, 4);
                    g.drawPolygon(x13, y13, 4);
                    g.drawPolygon(x14, y14, 4);
                    g.drawPolygon(x15, y15, 4);
                    g.drawPolygon(x16, y16, 4);
                    g.drawPolygon(x17, y17, 4);
                    g.drawPolygon(x18, y18, 4);
                    g.drawPolygon(x19, y19, 4);
                    g.drawPolygon(x20, y20, 4);
                    g.drawPolygon(x21, y21, 4);
                    g.drawPolygon(x22, y22, 4);
                    g.drawPolygon(x23, y23, 4);
                    g.drawPolygon(x24, y24, 4);
                    g.drawPolygon(x25, y25, 4);
                    g.drawPolygon(x26, y26, 4);
                    g.drawPolygon(x27, y27, 4);
                    g.drawPolygon(x28, y28, 4);
                    g.drawPolygon(x29, y29, 4);
                    g.drawPolygon(x30, y30, 4);
                    g.drawPolygon(x31, y31, 4);
                    g.drawPolygon(x32, y32, 4);
                    g.drawPolygon(x33, y33, 4);
                    g.drawPolygon(x34, y34, 4);
                    g.drawPolygon(x35, y35, 4);
                    g.drawPolygon(x36, y36, 4);    
            }
        };
        File file = new File("gazou.jpg");
        if(file.exists()){
            System.out.println("画像が存在するよ!");
            if(file.canRead()){
                System.out.println("画像を読み込めれれるよ!");
                BufferedImage image = (BufferedImage) ImageIO.read(file); 
                System.out.println("画像を読みこんだよ!");
                for(int i=0;i<4;i++){
                    imagehairetu[i] = image;
                }
                System.out.println(imagehairetu);
                /*一度byte型配列に変換*/
                /*ByteArrayOutputStream baito = new ByteArrayOutputStream();
                ImageIO.write( image,"jpg" ,baito );
                baito.flush();
                byte[] imageInByte = baito.toByteArray();
                baito.close();
                ByteArrayInputStream in = new ByteArrayInputStream(imageInByte);
                System.out.println("画像をbyte型の配列に変換したよ");*/
            }else{
                System.out.println("画像を読み込めないよ!");
            }
        }else{
            System.out.println("画像が存在しないよ!");
        }
        Container contentPane = getContentPane();
        getContentPane().add(p, BorderLayout.CENTER);
    }
    public void paint(Graphics g){
        Color color1 = new Color(read.getRGB(x[0], y[0]));
        Color color2 = new Color(read.getRGB(x[1], y[1] ));
        Color color3 = new Color(read.getRGB(x[2], y[2]));
        Color color4 = new Color(read.getRGB(x[3], y[3]));
        Color color5 = new Color(read.getRGB(x[4], y[4]));
        Color color6 = new Color(read.getRGB(x[5], y[5] ));
        Color color7 = new Color(read.getRGB(x[6], y[6] ));
        Color color8 = new Color(read.getRGB(x[7], y[7] ));
        Color color9 = new Color(read.getRGB(x[8], y[8] ));
        Color color10 = new Color(read1.getRGB(x[0], y[0]));
        Color color11 = new Color(read1.getRGB(x[1], y[1]));
        Color color12 = new Color(read1.getRGB(x[2], y[2]));
        Color color13 = new Color(read1.getRGB(x[3], y[3]));
        Color color14 = new Color(read1.getRGB(x[4], y[4]));
        Color color15 = new Color(read1.getRGB(x[5], y[5]));
        Color color16 = new Color(read1.getRGB(x[6], y[6]));
        Color color17 = new Color(read1.getRGB(x[7], y[7]));
        Color color18 = new Color(read1.getRGB(x[8], y[8]));
        Color color19 = new Color(read2.getRGB(x[0], y[0]));
        Color color20 = new Color(read2.getRGB(x[1], y[1]));
        Color color21 = new Color(read2.getRGB(x[2], y[2]));
        Color color22 = new Color(read2.getRGB(x[3], y[3]));
        Color color23 = new Color(read2.getRGB(x[4], y[4]));
        Color color24 = new Color(read2.getRGB(x[5], y[5]));
        Color color25 = new Color(read2.getRGB(x[6], y[6]));
        Color color26 = new Color(read2.getRGB(x[7], y[7]));
        Color color27 = new Color(read2.getRGB(x[8], y[8]));
        Color color28 = new Color(read3.getRGB(x[0], y[0]));
        Color color29 = new Color(read3.getRGB(x[1], y[1]));
        Color color30 = new Color(read3.getRGB(x[2], y[2]));
        Color color31 = new Color(read3.getRGB(x[3], y[3]));
        Color color32 = new Color(read3.getRGB(x[4], y[4]));
        Color color33 = new Color(read3.getRGB(x[5], y[5]));
        Color color34 = new Color(read3.getRGB(x[6], y[6]));
        Color color35 = new Color(read3.getRGB(x[7], y[7]));
        Color color36 = new Color(read3.getRGB(x[8], y[8]));

        g.setColor(color9);
        g.drawPolygon(x1, y1, 4);
        g.setColor(color6);
        g.drawPolygon(x2, y2, 4);
        g.setColor(color7);
        g.drawPolygon(x3, y3, 4);
        g.setColor(color8);
        g.drawPolygon(x4, y4, 4);
        g.setColor(color1);
        g.drawPolygon(x5, y5, 4);
        g.setColor(color2);
        g.drawPolygon(x6, y6, 4);
        g.setColor(color3);
        g.drawPolygon(x7, y7, 4);
        g.setColor(color4);
        g.drawPolygon(x8, y8, 4);
        g.setColor(color5);
        g.drawPolygon(x9, y9, 4);
        g.setColor(color14);
        g.drawPolygon(x10, y10, 4);
        g.setColor(color13);
        g.drawPolygon(x11, y11, 4);
        g.setColor(color12);
        g.drawPolygon(x12, y12, 4);
        g.setColor(color11);
        g.drawPolygon(x13, y13, 4);
        g.setColor(color10);
        g.drawPolygon(x14, y14, 4);
        g.setColor(color17);
        g.drawPolygon(x15, y15, 4);
        g.setColor(color16);
        g.drawPolygon(x16, y16, 4);
        g.setColor(color15);
        g.drawPolygon(x17, y17, 4);
        g.setColor(color18);
        g.drawPolygon(x18, y18, 4);
        g.setColor(color23);
        g.drawPolygon(x19, y19, 4);
        g.setColor(color22);
        g.drawPolygon(x20, y20, 4);
        g.setColor(color21);
        g.drawPolygon(x21, y21, 4);
        g.setColor(color20);
        g.drawPolygon(x22, y22, 4);
        g.setColor(color19);
        g.drawPolygon(x23, y23, 4);
        g.setColor(color26);
        g.drawPolygon(x24, y24, 4);
        g.setColor(color25);
        g.drawPolygon(x25, y25, 4);
        g.setColor(color24);
        g.drawPolygon(x26, y26, 4);
        g.setColor(color27);
        g.drawPolygon(x27, y27, 4);
        g.setColor(color32);
        g.drawPolygon(x28, y28, 4);
        g.setColor(color31);
        g.drawPolygon(x29, y29, 4);
        g.setColor(color30);
        g.drawPolygon(x30, y30, 4);
        g.setColor(color29);
        g.drawPolygon(x31, y31, 4);
        g.setColor(color28);
        g.drawPolygon(x32, y32, 4);
        g.setColor(color33);
        g.drawPolygon(x33, y33, 4);
        g.setColor(color34);
        g.drawPolygon(x34, y34, 4);
        g.setColor(color35);
        g.drawPolygon(x35, y35, 4);
        g.setColor(color36);
        g.drawPolygon(x36, y36, 4);
    }
}


このソースで動かそうとしているのですが、改善点ありましたらご指摘お願いします。
エラー
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at GazouinputStrream.<init>(GazouinputStrream.java:219)
at GazouinputStrream.main(GazouinputStrream.java:148)
とエラー出てしまうのですがどうしてでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

ん?

BufferedImage imagehairetu[]={};

これは可変長配列の作成じゃなく サイズ0の配列の作成ですよ

BufferedImage imagehairetu[]=new BufferedImage[4];

のようにあらかじめ利用する個数を設定してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/25 12:55

    ご返答ありがとうございます。たしかに配列の宣言の書き方がだめでした。返答ありがとうございました。

    キャンセル

+1

java.lang.ArrayIndexOutOfBoundsException: 0

これは配列やリストのサイズをオーバーしてアクセスしたことを意味します。
0とはアクセスした要素番号なので、0番目の要素にアクセスしたけど、そんなにサイズがないということですね。

つまりは配列のサイズをきちんと用意してないものにアクセスしているので、
配列を見直してみましょう。
(行番号書いてるのですぐ見つけ出せるかと思います。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/25 12:55

    たしかに配列の宣言の仕方がだめだったようです。ご返答ありがとうございました。

    キャンセル

0

保存したならそこから読むのに制限はないと思いますが、どういうことを想定されてますか?
あるいはどういう事が起きると思っているんでしょうか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/25 12:02

    今ソースを追記したのですが、自分もfor文で一個ずつ読み取れると思っているのですが、なぜかエラーに引っかかってしまいます。考えているのは、保存した画像があるかチェックして読み取れれるか確認してから配列に一個ずつ読み取る。それから読み取った画像を座標をもとに色を抽出する。というのを作りたいんですが、なぜか読み取る部分でエラーに引っかかってします。改善点のご指示とかありましたらお願いします。

    キャンセル

  • 2018/10/25 12:56

    上記に書いていただいたお二人かたのやり方でうまくいきました。ご返答ありがとうございました。

    キャンセル

  • 2018/10/25 12:58

    トラブルの解決には、持っている情報をすべて出すことが必要ですね

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る