Example #1
0
        protected override RequestedAction LayoutImage(ImageState s)
        {
            if (s.sourceBitmap == null)
            {
                return(RequestedAction.None);
            }


            //Parse carve data bitmap
            if (!string.IsNullOrEmpty(s.settings["carve.data"]))
            {
                string[] parts = s.settings["carve.data"].Split('|');
                //Parse block count and string
                var block_count = int.Parse(parts[0]);
                var carveString = new LzwDecoder("012").Decode(PathUtils.FromBase64UToBytes(parts[1]));

                float block_size = (int)Math.Floor(Math.Sqrt(s.originalSize.Width * s.originalSize.Height / (double)block_count));

                var carveData = new CarveDataPlotter()
                {
                    BlockCount = block_count,
                    Stride     = (int)Math.Ceiling((float)s.originalSize.Width / block_size),
                    Rows       = (int)Math.Ceiling((float)s.originalSize.Height / block_size)
                };

                carveData.Init(carveString);

                Size remove = carveData.GetRemovalSpace(s.originalSize.Width, s.originalSize.Height, (int)block_size);

                if (remove.Width / s.originalSize.Width > remove.Height / s.originalSize.Height)
                {
                    s.originalSize = new Size(s.originalSize.Width - remove.Width, s.originalSize.Height);
                }
                else
                {
                    s.originalSize = new Size(s.originalSize.Width, s.originalSize.Height - remove.Height);
                }

                //Save later
                s.Data[CarveData] = carveData;
            }



            return(RequestedAction.None);
        }
Example #2
0
        protected override RequestedAction LayoutImage(ImageState s)
        {
            if (s.sourceBitmap == null) return RequestedAction.None;

            //Parse carve data bitmap
            if (!string.IsNullOrEmpty(s.settings["carve.data"])) {
                string[] parts = s.settings["carve.data"].Split('|');
                //Parse block count and string
                var block_count = int.Parse(parts[0]);
                var carveString = new LzwDecoder("012").Decode(PathUtils.FromBase64UToBytes(parts[1]));

                float block_size = (int)Math.Floor(Math.Sqrt(s.originalSize.Width * s.originalSize.Height / (double)block_count));

                var carveData = new CarveDataPlotter() {
                    BlockCount=block_count,
                    Stride = (int)Math.Ceiling((float)s.originalSize.Width / block_size),
                    Rows = (int)Math.Ceiling((float)s.originalSize.Height / block_size)
                };

                carveData.Init(carveString);

                Size remove = carveData.GetRemovalSpace(s.originalSize.Width,s.originalSize.Height,(int)block_size);

                if (remove.Width / s.originalSize.Width > remove.Height / s.originalSize.Height) {
                    s.originalSize = new Size(s.originalSize.Width - remove.Width, s.originalSize.Height);
                } else {
                    s.originalSize = new Size(s.originalSize.Width, s.originalSize.Height - remove.Height);
                }

                //Save later
                s.Data[CarveData] = carveData;
            }

            return RequestedAction.None;
        }