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); }
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; }