• category: swing folder: ColorPicker title: JLabel上に表示した画像のクリックした位置の色を取得する tags: [JLabel, ImageIcon, MouseListener, Graphics] author: aterai pubdate: 2021-07-05T03:02:53+09:00 description: JLabelにIconとして画像を表示し、その画像をマウスでクリックした位置の色を取得します。 image: https://drive.google.com/uc?id=1Q-RhXizUQcuAu_FPuY4zPAwSVpeGHsnk

概要

JLabelにIconとして画像を表示し、その画像をマウスでクリックした位置の色を取得します。

サンプルコード

JLabel label = new JLabel(new ImageIcon(image));
label.addMouseListener(new MouseAdapter() {
  @Override public void mousePressed(MouseEvent e) {
    updateViewRect(label);
    Point pt = e.getPoint();
    if (iconRect.contains(pt)) {
      int argb = image.getRGB(pt.x - iconRect.x, pt.y - iconRect.y);
      field.setText(String.format("#%06X", argb & 0x00_FF_FF_FF));
      sample.setIcon(new ColorIcon(new Color(argb, true)));
    }
  }
});
View in GitHub: Java, Kotlin

解説

  • ImageIO.read(...)で画像ファイルをBufferedImageとして読み込む
  • JLabelnew ImageIcon(BufferedImage)で作成したIconを設定
  • JLabelMouseListenerを追加してマウスクリック位置を取得
  • JLabel内のIcon表示領域をSwingUtilities.layoutCompoundLabel(...)で更新
  • JLabel上のマウスクリック位置をIcon(BufferedImage)の座標に変換し、BufferedImage#getRGB(...)メソッドで整数型ピクセル値で色を取得
    • 取得した色からIconを生成してサンプル表示用のJLabelに設定
    • 取得した色を16進数カラーコードの6桁文字列に変換してJTextFieldに設定

参考リンク

コメント