private void RequestImageTransform() { if (originalImage == null || backgroundWorker.IsBusy) { return; } WorkerData workerData; IPixelTransform transform; IErrorDiffusion ditherer; Bitmap image; transform = GetPixelTransform(); ditherer = GetDitheringInstance(); image = ImageProcessor.DeepClone(originalImage.Image, PixelFormat.Format32bppArgb);//.CopyTo32bppArgb(); if (image == null) { return; } if (transform == null) { return; } Cursor.Current = Cursors.WaitCursor; this.UseWaitCursor = true; workerData = new WorkerData { Image = image, Transform = transform, Dither = ditherer }; if (InternalSettings.Use_Async_Dither) { backgroundWorker.RunWorkerAsync(workerData); } else { backgroundWorker_RunWorkerCompleted( backgroundWorker, new RunWorkerCompletedEventArgs(DitherHelper.GetTransformedImage(workerData), null, false)); } }
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { WorkerData data; data = (WorkerData)e.Argument; // need to keep track of the worker and event args // so that we can check for cancel in the function data.Worker = sender as BackgroundWorker; data.Args = e; Bitmap btmp = DitherHelper.GetTransformedImage(data); if (e.Cancel == true) { btmp?.Dispose(); return; } e.Result = btmp; }