/// <summary> /// Инвертирует битмам /// </summary> /// <param name="bitmap">Инвертируемый битмап</param> private void InverseBitmap(Bitmap bitmap) { for (int row = 0; row < bitmap.Height; row++) { for (int col = 0; col < bitmap.Width; col++) { Color currentClr = bitmap.GetPixel(col, row); Color inverseClr = Color.FromArgb(255, 255 - currentClr.R, 255 - currentClr.G, 255 - currentClr.B); bitmap.SetPixel(col, row, inverseClr); //Инициируем событие изменения прогресса инвертирования if (this.InverseProressChanged != null) { InverseProgressChangedEventArgs e = new InverseProgressChangedEventArgs() { Min = 0, Max = bitmap.Width * bitmap.Height, Progress = row * bitmap.Width + col }; this.InverseProressChanged(this, e); } } } }
/// <summary> /// Обновление прогрессбара при инвертировании изображения. /// Выполняется в потоке инвертирования /// </summary> private void OnInverseProgressChanged(object sender, EventArgs e) { InverseProgressChangedEventArgs eArgs = e as InverseProgressChangedEventArgs; if (eArgs != null) { this.Invoke(new Action(() => this.sbpbProgress.Value = 100 * eArgs.Progress / (eArgs.Max - eArgs.Min))); } }