• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:RGBImageFilterでアイコンの色調を変更
#navi(../)
*RGBImageFilterでアイコンの色調を変更 [#w9fce2db]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2006-08-21~
更新日:&lastmod;
---
category: swing
folder: RatingLabel
title: RGBImageFilterでアイコンの色調を変更
tags: [ImageIcon, RGBImageFilter, JLabel]
author: aterai
pubdate: 2006-08-21T11:55:27+09:00
description: RGBImageFilterで色調を変更したアイコンの用意し、評価用コンポーネントを作成します。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTRfRNaARI/AAAAAAAAAhQ/8Rj6Rw8bkwU/s800/RatingLabel.png
hreflang:
    href: https://java-swing-tips.blogspot.com/2008/12/jlabel-star-rating-bar.html
    lang: en
---
* 概要 [#summary]
`RGBImageFilter`で色調を変更したアイコンの用意し、評価用コンポーネントを作成します。

#contents
**概要 [#l9857d29]
RGBImageFilterで色調を変更したアイコンの用意し、評価用コンポーネントを作成します。
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTRfRNaARI/AAAAAAAAAhQ/8Rj6Rw8bkwU/s800/RatingLabel.png)

#screenshot
* サンプルコード [#sourcecode]
#code(link){{
private final ImageProducer ip = orgIcon.getImage().getSource();

**サンプルコード [#a85a2963]
 private final ImageProducer ip = orgIcon.getImage().getSource();
 private MyLabel makeLabel(float[] filter) {
   SelectedImageFilter sif = new SelectedImageFilter(filter);
   ImageIcon imageIcon = new ImageIcon(
     createImage(new FilteredImageSource(ip, sif)));
   return new MyLabel(imageIcon);
 }
 private class SelectedImageFilter extends RGBImageFilter {
   private final float[] filter;
   public SelectedImageFilter(float[] filter) {
     this.filter = filter;
     canFilterIndexColorModel = true;
   }
   public int filterRGB(int x, int y, int argb) {
     Color color = new Color(argb, true);
       float[] array = new float[4];
       color.getComponents(array);
       return new Color(array[0]*filter[0],
                        array[1]*filter[1],
                        array[2]*filter[2],
                        array[3]).getRGB();
     }
   }
 }
private static ImageIcon makeStarImageIcon(
    ImageProducer ip, float rf, float gf, float bf) {
  return new ImageIcon(Toolkit.getDefaultToolkit().createImage(
    new FilteredImageSource(ip, new SelectedImageFilter(rf, gf, bf))));
}

-&jnlp;
-&jar;
-&zip;
class SelectedImageFilter extends RGBImageFilter {
  private final float rf;
  private final float gf;
  private final float bf;

**解説 [#s11c2ccf]
RGBImageFilterを使用して、一つのアイコンから複数の色の異なるアイコンを生成しています。
  protected SelectedImageFilter(float rf, float gf, float bf) {
    super();
    this.rf = Math.min(1f, rf);
    this.gf = Math.min(1f, gf);
    this.bf = Math.min(1f, bf);
    canFilterIndexColorModel = false;
  }

上記のサンプルは、アマゾンなど((いろんな所でよく見かけるのですが、オリジナルは何処なんでしょうか?))でよく見かける5段階の評価を行うコンポーネントです。クリックしたアイコンの位置が評価レベルになります。
  @Override public int filterRGB(int x, int y, int argb) {
    int r = (int) (((argb >> 16) & 0xFF) * rf);
    int g = (int) (((argb >> 8) & 0xFF) * gf);
    int b = (int) ((argb & 0xFF) * bf);
    return (argb & 0xFF_00_00_00) | (r << 16) | (g << 8) | (b);
  }
}
}}

**参考リンク [#s1cec87d]
-[[XP Style Icons - Windows Application Icon, Software XP Icons>http://www.icongalore.com/]]
--アイコンを利用しています。
* 解説 [#explanation]
上記のサンプルは`RGBImageFilter`を使用して`1`つのアイコンから複数の色の異なるアイコンを生成し、`5`段階の評価を行うコンポーネントを作成しています。クリックしたアイコンの位置が評価レベルになります。

**コメント [#afaf0ed0]
* 参考リンク [#reference]
- [http://www.freeiconsdownload.com/Free_Downloads.asp?id=60 PI Diagona Icons Pack 1.0 - Download Royalty Free Icons and Stock Images For Web & Graphics Design]
-- アイコンを引用

* コメント [#comment]
#comment
素晴しい!:)
- 素晴しい!:)--  &new{2006-08-23 (水) 17:34:40};
-- どうもです。 -- [[aterai]]
- メモ: 一般的?には`Rating Bar`と言うみたいです。[http://www.masugadesign.com/the-lab/scripts/unobtrusive-ajax-star-rating-bar/ Masuga Design » Unobtrusive AJAX Star Rating Bar] -- &user(aterai); &new{2006-11-07 (火) 12:38:34};
- アイコンを変更、アイコンの間隔を設定 -- &user(aterai); &new{2008-10-20 (月) 18:20:50};
- スクリーンショットを更新 -- &user(aterai); &new{2008-11-25 (火) 11:19:25};

#comment