• ベストアンサー

取得した色の比較方法

Robot().getPixelColor(int,int)を利用して得た 2つの指定座標の色を比較し同じ色か違う色かで 処理を分岐したいのですが どうするとよろしいのでしょうか・・・? 大体やりたいことはこんな感じで・・・ Color cr1 , cr2; Robot r = new Robot(); cr1 = r.getPixelColor(x,y); cr2 = r.getPixelColor(x',y'); if( cr1 == cr2 ){} ←このままだとちゃんと処理されなかったので else{}

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.2

オブジェクト指向言語の勉強を始めて、 誰もがつまずく最初のハードルだと思います。 オブジェクトAとBが同一(のインスタンス)であるかどうかを調べるには   A == B を使います。 また、オブジェクトを構成している内部変数値同士が等しいかどうかを 比較する場合には、   A.equals(B) を使えばうまくいく場合もあります。 今回のColorクラスの場合は、   if( cr1.equals(cr2) ){} を使用すれば所望の結果が得られるでしょう。 しかし、いつもこの方法が成功する保障はありません。 多くのユーザーレベルのクラスでは、equalsメソッドを 正しく実装している場合の方が少ないので注意が必要です。 また   if( cr1.getRGB() == cr2.getRGB() ){}       または、   if( cr1.getRed() == cr2.getRed() && cr1.getGreen() == cr2.getGreen()      && cr1.getBlue() == cr2.getBlue() && cr1.getAlpha() == cr2.getAlpha() ){} を使うのもひとつの方法です。 これならば、Colorクラス内のequalsメソッドの具体的な実装に 依存せず、オブジェクトのなにを比較しているのかを誰が見ても 明らかですので、ひとつの優れた方法です。 例えば、   JFrame j1 = new JFrame();   JFrame j2 = new JFrame();   if( j1.equals(j2) ){} という他人の書いたソースを見たときに、 何を比較しているのか、具体的なJFrameクラスの実装を見ずして その意味を理解できる人はいないでしょう。

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

Color クラスに実装されている equals() メソッドはクラス設計者が「同じ色」を 判断する時に使用してもらうことを意図して実装されているので、それが soushi0809 さんの希望する動作と合致しているのであれば、equals() を使うべきです。 例えば私の設計したクラス Hoge に equals() が実装されていない場合、 私は「同じである」ことを判断する基準を Hoge クラスに与えていない。ということです。 soushi0809 さんがそのようなクラスのインスタンスに対して「同じ」かどうかを判断する 必要に迫られた場合、Hoge クラスを直接使用するのではなく、クラスを継承するなどして equals() メソッドを追加するべきで、if 文の各所で判断ロジックを埋め込んではいけません。

soushi0809
質問者

お礼

ご回答ありがとうございます。 equals()で考えていた動作ができました~^^* 同色を判断をしてくれるメソッドが用意されていたんですね・・・orz

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

Color クラスのドキュメントを読んで下さい。

関連するQ&A