Exemple #1
0
        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;
        }