2つの画像の違いを取得したい
私はこのソースコードを使用します:
public Bitmap GetDifference(Bitmap bm1, Bitmap bm2)
{
if (bm1.Size != bm2.Size)
throw new ArgumentException("exception");
var resultImage = new Bitmap(bm1.Width, bm1.Height);
using (Graphics g = Graphics.FromImage(resultImage))
g.Clear(Color.Transparent);
for (int w = 0; w < bm1.Width; w++)
{
for (int h = 0; h < bm1.Height; h++)
{
var bm2Color = bm2.GetPixel(w, h);
if (IsColorsDifferent(bm1.GetPixel(w, h), bm2Color))
{
resultImage.SetPixel(w, h, bm2Color);
}
}
}
return resultImage;
}
bool IsColorsDifferent(Color c1, Color c2)
{
return c1 != c2;
}
このソースは私にとってはうまく機能しますが、次の問題があります。
たとえば、解像度 480x320 の画像を選択した場合、resultImage の解像度は同じですが (新しいビットマップを作成したときに設定したため、これは正しいです)、私の画像は透明な色で、単色のみの結果画像を取得したい.
たとえば、480x320 のソリッド結果イメージ (ソリッド カラー ピクセル) に 100x100 フィールドがある場合、このソリッド ビットマップだけを解像度 100x100 で取得する必要があります。
簡単に言えば、単色とアルファシャネルのカットで囲まれた長方形のみを取得する必要があります。
ありがとう!