private async void ImagesDifferenceAsync(Image firstImage, Image secondImage) { var bmpDiffTiffBtnBefore = bmpDiffTiffBtn.Enabled; var bmpDiffJpegBtnBefore = bmpDiffJpegBtn.Enabled; var tiffDiffJpegBtnBefore = tiffDiffJpegBtn.Enabled; bmpDiffTiffBtn.Enabled = false; bmpDiffJpegBtn.Enabled = false; tiffDiffJpegBtn.Enabled = false; var width = firstImage.Width; var height = firstImage.Height; var first = (Bitmap)firstImage; var second = (Bitmap)secondImage; var diff = new Bitmap(width, height); var rgbColor = new RGB(); await Task.Run(() => { const int multiplier = 6; for (var i = 0; i < width; ++i) { for (var j = 0; j < height; ++j) { var r = allColorsRadio.Checked || redColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).R - second.GetPixel(i, j).R) : 0; var g = allColorsRadio.Checked || greenColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).G - second.GetPixel(i, j).G) : 0; var b = allColorsRadio.Checked || blueColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).B - second.GetPixel(i, j).B) : 0; rgbColor.Append(r, g, b); r *= multiplier; g *= multiplier; b *= multiplier; r = r > 255 ? 255 : r; g = g > 255 ? 255 : g; b = b > 255 ? 255 : b; diff.SetPixel(i, j, Color.FromArgb(byte.MaxValue, r, g, b)); } } }); _image = Image.FromHbitmap(diff.GetHbitmap()); redColorLabel.Text = rgbColor.R.ToString(); greenColorLabel.Text = rgbColor.G.ToString(); blueColorLabel.Text = rgbColor.B.ToString(); pictureBox.Image = _image; bmpDiffTiffBtn.Enabled = bmpDiffTiffBtnBefore; bmpDiffJpegBtn.Enabled = bmpDiffJpegBtnBefore; tiffDiffJpegBtn.Enabled = tiffDiffJpegBtnBefore; }
private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { var images = (Image[])e.Argument; var width = images[0].Width; var height = images[1].Height; var first = (Bitmap)images[0]; var second = (Bitmap)images[1]; var diff = new Bitmap(width, height); var rgbColor = new RGB(); const int multiplier = 6; for (var i = 0; i < width; ++i) { for (var j = 0; j < height; ++j) { var r = allColorsRadio.Checked || redColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).R - second.GetPixel(i, j).R) : 0; var g = allColorsRadio.Checked || greenColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).G - second.GetPixel(i, j).G) : 0; var b = allColorsRadio.Checked || blueColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).B - second.GetPixel(i, j).B) : 0; rgbColor.Append(r, g, b); r *= multiplier; g *= multiplier; b *= multiplier; r = r > 255 ? 255 : r; g = g > 255 ? 255 : g; b = b > 255 ? 255 : b; diff.SetPixel(i, j, Color.FromArgb(byte.MaxValue, r, g, b)); backgroundWorker.ReportProgress(i * 100 / width); } } rgb = rgbColor; this.diff = diff; backgroundWorker.ReportProgress(100); }
private async void ImagesDifferenceAsync(Image firstImage, Image secondImage) { var width = firstImage.Width; var height = firstImage.Height; var first = (Bitmap)firstImage; var second = (Bitmap)secondImage; var diff = new Bitmap(width, height); var rgbColor = new RGB(); await Task.Run(() => { const int multiplier = 6; for (var i = 0; i < width; ++i) { for (var j = 0; j < height; ++j) { var r = allColorsRadio.Checked || redColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).R - second.GetPixel(i, j).R) : 0; var g = allColorsRadio.Checked || greenColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).G - second.GetPixel(i, j).G) : 0; var b = allColorsRadio.Checked || blueColorRadio.Checked ? Math.Abs(first.GetPixel(i, j).B - second.GetPixel(i, j).B) : 0; rgbColor.Append(r, g, b); r *= multiplier; g *= multiplier; b *= multiplier; r = r > 255 ? 255 : r; g = g > 255 ? 255 : g; b = b > 255 ? 255 : b; diff.SetPixel(i, j, Color.FromArgb(byte.MaxValue, r, g, b)); } } }); rgb = rgbColor; this.diff = diff; }