ImageList
アプリケーションでとを使用PictureBox
しています。PictureBox
の画像から動的に画像をロードしていImageList
ます。PictureBox
の画像と の画像の特定のインデックスImageList
が等しいかどうかを確認する必要があります。誰でも私を案内できますか?
3 に答える
残念ながら、このクラスは演算子またはメソッドをImage
実装していません。つまり、オブジェクト参照が同じであるかどうかをチェックするだけのデフォルトの実装をクラスから継承します。から直接画像が割り当てられている場合でも、これは失敗することがわかります。==
Equals
Object
PictureBox
ImageList
したがって、画像が同じであるかどうかを確認するために、独自のロジックを実装する必要があります。いくつかの異なるアプローチがあります。2つの画像のそれぞれをバイト配列にロードしてバイトごとの比較を行うか、2つの画像をピクセルごとにループしてそれらの色を比較することができます。もちろん、これらの方法はどちらも、比較的遅いものから不当に遅いものまであります。最初に寸法を比較し(Image
オブジェクトはその寸法を返すSize
プロパティを提供します)、等しくない場合はFalseを返すことで、最適化できる可能性がありますが、この場合、すべての画像が機能しない可能性があります。ImageList
同じ寸法になります。
もしそれが私なら、私は自分自身の手間を省き、クラスレベルの変数ImageList
のどこかに割り当てた画像のインデックスを保持するだけです...PictureBox
私の警告にもかかわらずあなたがまだ毅然としているなら、この同様の質問への答えを見てください。
画像リストに行く代わりにおい。リストボックスを使用するだけです。ユーザーから2つの入力を受け取るC#でツールをプログラムしました。1 つ目は大量の画像を含むフォルダーで、2 つ目は入力画像 (大量の画像から分離する必要がある類似の画像) です。
入力フォルダーをいつ取得するか。listBox ie; 内のフォルダーの内容を一覧表示します。フォルダ内のすべての画像のパス。
フォルダー内のすべての画像のパスを取得したので、画像を 1 つずつビットマップの画像に取り込み、以前に指定した入力画像と比較します。任意の方法または類似性メトリックを使用して、画像がどの程度または何%同じであるかを調べます。
% に注意して、それらを大量の画像から分離します (フォルダー内のすべての画像のパスがあるため、これも簡単です)。
どこまではっきりさせたのかわからない。これがあなたの役に立てば幸いです。幸運を
絶対的な解決策があります
画像に値を割り当てます。
画像ごとに異なるタグを付ける
それが解決策であり、タグ値に基づいて比較できます