コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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;
        }