2つのSystem.Drawing.Image
エンティティを比較しようとすると、何がうまくいかないのか分かりますか?C#参照の比較
Image.FromFile(path)
メソッドを使用して繰り返し構成されたIEnumerable<Image> images
があります。
しかし、次のコードは、私はかなり理解できない結果が得られます。
foreach (var image1 in images)
{
foreach (var image2 in images)
{
if (image1 == image2)
{
// (Do something!)
}
}
}
事が(Do something!)
一部が呼ばれることは決してありませんということです。
System.Drawing.Image
がマーシャリングを使用して実装されているため、イメージオブジェクトにはnativeImage
というプロパティがあり、未使用のメモリポインタと見なされます。
このメモリポインタはいつも変更されていますが、私はここで何らかのクローニングが起こっていると思いますが、実際に何をすればいいのか理解できません。私が間違って何を
をやっているとどのように私は実際にそれらが同じであるかどうかを確認するために1つのIEnumerable<>
シーケンスから取らSystem.Drawing.Image
オブジェクトを比較することができますか?
ありがとうございます。 ToList()
なし
更新
var paths = new List<String> {"Tests/1_1.jpg", "Tests/1_2.jpg"};
IEnumerable<Image> images = paths.Select(path => Image.FromFile(path)).ToList();
foreach (var image1 in images)
{
foreach (var image2 in images)
{
if (ReferenceEquals(image1, image2))
{
}
}
}
これは明らかに動作しませんでした、私は非常に愚かです。
ありがとうございました。
実際に**同じ**画像を比較している画像はありますか? – gideon
@giddyうん、私は異なる次元の2つの画像でチェックしました。 *明らかに同じ画像を指していますが、異なるオブジェクトとして扱われます。* –
'Image.Equals'とは何ですか? – khachik