protected override bool Execute(ImageProcessingContext context)
        {
            FastBitMap bmpSource;

            if (!context.TryGetImage(ImageName, out bmpSource))
            {
                ExecutionMessage = string.Format("Image named '{0}' has not been found in current processing context",
                                                 ImageName);
                return(false);
            }
            try
            {
                bmpSource.Picture.Save(FileName, Format);
            }
            catch (Exception ex)
            {
                ExecutionMessage = ex.Message;
#if DEBUG
                throw;
#else
                return(false);
#endif
            }
            return(true);
        }
예제 #2
0
        public bool Run(IEnumerable <ImageProcessingTask> tasks, out TimeSpan totalTimeSpent)
        {
            var timeStart = DateTime.UtcNow;
            var context   = new ImageProcessingContext();
            var result    = tasks.All(task => task.Run(context));

            totalTimeSpent = DateTime.UtcNow - timeStart;
            return(result);
        }
예제 #3
0
        public virtual bool Run(out TimeSpan totalTimeSpent)
        {
            var timeStart = DateTime.UtcNow;
            var context   = new ImageProcessingContext();
            var result    = GetTasks().All(task => task.Run(context));

            totalTimeSpent = DateTime.UtcNow - timeStart;
            return(result);
        }
        public bool Run(ImageProcessingContext context)
        {
            IsComplete = false;
            var timeStart = DateTime.UtcNow;
            var result    = Execute(context);

            TimeSpentOnExecution = DateTime.UtcNow - timeStart;
            IsComplete           = true;
            return(result);
        }
        protected override bool Execute(ImageProcessingContext context)
        {
            FastBitMap bmp;

            if (!context.TryGetImage(ImageFileName, out bmp))
            {
                ExecutionMessage = string.Format("Image named '{0}' has not been found in current processing context",
                                                 ImageFileName);
                return(false);
            }

            switch (LockMode)
            {
            case ImageLockMode.ReadOnly:
                if (bmp.CanWrite)
                {
                    bmp.CanWrite = false;
                }
                if (!bmp.CanRead)
                {
                    bmp.CanRead = true;
                }
                break;

            case ImageLockMode.WriteOnly:
                if (!bmp.CanWrite)
                {
                    bmp.CanWrite = true;
                }
                if (bmp.CanRead)
                {
                    bmp.CanRead = false;
                }
                break;

            case ImageLockMode.ReadWrite:
                if (!bmp.CanReadAndWrite)
                {
                    bmp.CanReadAndWrite = true;
                }
                break;

            case ImageLockMode.UserInputBuffer:
                if (bmp.CanRead || bmp.CanWrite)
                {
                    bmp.CanReadAndWrite = false;
                }
                break;

            default:
                ExecutionMessage = string.Format("Passed LockMode value ({0}) is out of range", (int)LockMode);
                return(false);
            }
            return(true);
        }
        protected override bool Execute(ImageProcessingContext context)
        {
            FastBitMap bmpSource, bmpTarget;

            if (!context.TryGetImage(SourceImageFileName, out bmpSource))
            {
                ExecutionMessage = string.Format("Image named '{0}' has not been found in current processing context",
                                                 SourceImageFileName);
                return(false);
            }
            if (!context.TryGetImage(TargetImageFileName, out bmpTarget))
            {
                ExecutionMessage = string.Format("Image named '{0}' has not been found in current processing context",
                                                 TargetImageFileName);
                return(false);
            }
            for (var i = 0; i < ThreadsToUse; ++i)
            {
                context.ThreadList.Add(new ImageProcessingThread());
            }

            var xBlocks = (int)Math.Ceiling((float)bmpSource.Width / MaxFragmentWidth);
            var yBlocks = (int)Math.Ceiling((float)bmpSource.Height / MaxFragmentHeight);

            for (var by = 0; by <= yBlocks; ++by)
            {
                for (var bx = 0; bx <= xBlocks; ++bx)
                {
                    var x = bx * MaxFragmentWidth;
                    var y = by * MaxFragmentHeight;
                    var w = Math.Min(bmpSource.Width - x, MaxFragmentWidth);
                    var h = Math.Min(bmpSource.Height - y, MaxFragmentHeight);
                    context.ThreadList[(by * bmpSource.Width + bx) % ThreadsToUse].PushTask(new Rectangle(x, y, w, h));
                }
            }
            for (var i = 0; i < ThreadsToUse; ++i)
            {
                context.ThreadList[i].Start(new ImageProcessingThreadContext
                {
                    Original    = bmpSource,
                    Processor   = PixelProcessor,
                    Result      = bmpTarget,
                    ThreadCount = ThreadsToUse,
                    ThreadID    = i
                });
            }
            for (var i = 0; i < ThreadsToUse; ++i)
            {
                context.ThreadList[i].Wait();
            }
            return(true);
        }
        protected override bool Execute(ImageProcessingContext context)
        {
            FastBitMap bmpSource;

            if (!context.TryGetImage(SourceImageFileName, out bmpSource))
            {
                ExecutionMessage = string.Format("Image named '{0}' has not been found in current processing context",
                                                 SourceImageFileName);
                return(false);
            }

            context.Images[TargetImageName] = new FastBitMap(new Bitmap(bmpSource.Width, bmpSource.Height, PixelFormat.Format32bppArgb));
            return(true);
        }
        protected override bool Execute(ImageProcessingContext context)
        {
            try
            {
                var bitmap = new Bitmap(FileName);
                LoadedImage = new FastBitMap(bitmap);
                context.Images[FileName] = LoadedImage;
                return(true);
            }
            catch (Exception ex)
            {
                ExecutionMessage = ex.Message;
#if DEBUG
                throw;
#else
                return(false);
#endif
            }
        }
 protected abstract bool Execute(ImageProcessingContext context);