From f4bfa7c9fdc551ce8147808e245295a24fd92cca Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 17 Aug 2021 17:35:17 -0700 Subject: [PATCH] Improving Image Converter --- .../ApplicationView/SceneOperations.cs | 9 +++++-- .../DesignTools/Operations/Image/Histogram.cs | 8 +++--- .../Operations/Image/ImageToPathObject3D_2.cs | 8 +++++- .../DesignTools/PublicPropertyEditor.cs | 26 ++++--------------- Submodules/agg-sharp | 2 +- 5 files changed, 24 insertions(+), 29 deletions(-) diff --git a/MatterControlLib/ApplicationView/SceneOperations.cs b/MatterControlLib/ApplicationView/SceneOperations.cs index 754aa83d6..922469221 100644 --- a/MatterControlLib/ApplicationView/SceneOperations.cs +++ b/MatterControlLib/ApplicationView/SceneOperations.cs @@ -315,10 +315,15 @@ namespace MatterHackers.MatterControl ComponentID = "4D9BD8DB-C544-4294-9C08-4195A409217A", SurfacedEditors = new List { - "$.Children.Children.Children.Children.Children", + "$.Children.Children.Children.Children.Children.ImageSearch", + "$.Children.Children.Children.Children.Image", + "$.Children.Children.Children.Children.Children.Invert", + "$.Children.Children.Children.Children.Children.AssetPath", + "$.Children.Children.Children.Children.AnalysisType", + "$.Children.Children.Children.Children.TransparencyMessage", + "$.Children.Children.Children.Children.Histogram", "$.Children.Children.Height", "$.Children.Children.Children.SmoothDistance", - "$.Children.Children.Children.Children", "$.Children", } }; diff --git a/MatterControlLib/DesignTools/Operations/Image/Histogram.cs b/MatterControlLib/DesignTools/Operations/Image/Histogram.cs index a1695aa20..7d4f87ca8 100644 --- a/MatterControlLib/DesignTools/Operations/Image/Histogram.cs +++ b/MatterControlLib/DesignTools/Operations/Image/Histogram.cs @@ -257,8 +257,8 @@ namespace MatterHackers.MatterControl.DesignTools byte[] sourceBuffer = sourceImage.GetBuffer(); byte[] destBuffer = alphaImage.GetBuffer(); - //Parallel.For(0, sourceImage.Height, (y) => - for(int y = 0; y < sourceImage.Height; y++) + Parallel.For(0, sourceImage.Height, (y) => + //for(int y = 0; y < sourceImage.Height; y++) { int imageOffset = sourceImage.GetBufferOffsetY(y); @@ -273,8 +273,8 @@ namespace MatterHackers.MatterControl.DesignTools destBuffer[imageBufferOffsetWithX + 2] = r; destBuffer[imageBufferOffsetWithX + 3] = GetAlphaFromHue(r, g, b, RangeStart, RangeEnd); } - } - //}); + //} + }); alphaImage.MarkImageChanged(); diff --git a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs index 7e0f2ae16..76a093256 100644 --- a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs +++ b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D_2.cs @@ -30,7 +30,6 @@ either expressed or implied, of the FreeBSD Project. using System; using System.Collections.Generic; using System.ComponentModel; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using ClipperLib; @@ -72,6 +71,7 @@ namespace MatterHackers.MatterControl.DesignTools /// /// This is the image after it has been processed into an alpha image /// + [DisplayName("")] [JsonIgnore] [ImageDisplay(Margin = new int[] { 30, 3, 30, 3 }, MaxXSize = 400, Stretch = true)] public ImageBuffer Image @@ -155,9 +155,11 @@ namespace MatterHackers.MatterControl.DesignTools public string TransparencyMessage { get; set; } = "Your image is processed as is with no modifications. Transparent pixels are ignored, only opaque pixels are considered in feature detection."; + [DisplayName("")] [JsonIgnore] private ImageBuffer SourceImage => ((IImageProvider)this.Descendants().Where(i => i is IImageProvider).FirstOrDefault())?.Image; + [DisplayName("Select Range")] public Histogram Histogram { get; set; } = new Histogram(); public IVertexSource VertexSource { get; set; } = new VertexStorage(); @@ -252,6 +254,10 @@ namespace MatterHackers.MatterControl.DesignTools var _ = Image; // call this to make sure it is built Histogram.RebuildAlphaImage(SourceImage, alphaImage, Image, AnalysisType); } + else + { + Image?.CopyFrom(SourceImage); + } await Rebuild(); } else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) diff --git a/MatterControlLib/DesignTools/PublicPropertyEditor.cs b/MatterControlLib/DesignTools/PublicPropertyEditor.cs index 9434f79bb..6c7f6bb0b 100644 --- a/MatterControlLib/DesignTools/PublicPropertyEditor.cs +++ b/MatterControlLib/DesignTools/PublicPropertyEditor.cs @@ -602,7 +602,9 @@ namespace MatterHackers.MatterControl.DesignTools GuiWidget imageWidget; if (imageDisplayAttribute?.Stretch == true) { - imageWidget = new ResponsiveImageWidget(imageBuffer); + var responsiveImageWidget = new ResponsiveImageWidget(imageBuffer); + responsiveImageWidget.RenderCheckerboard = true; + imageWidget = responsiveImageWidget; } else { @@ -618,24 +620,6 @@ namespace MatterHackers.MatterControl.DesignTools imageWidget.Margin = new BorderDouble(0, 3); } - imageWidget.BeforeDraw += (s, e) => - { - // render a checkerboard that can show through the alpha mask - var g = e.Graphics2D; - var w = (int)(10 * GuiWidget.DeviceScale); - for (int x = 0; x < g.Width / w; x ++) - { - for (int y = 0; y < g.Height / w; y ++) - { - if (y % 2 == 0 && x % 2 == 1 - || y % 2 == 1 && x % 2 == 0) - { - g.FillRectangle(x * w, y * w, x * w + w, y * w + w, Color.LightGray); - } - } - } - }; - ImageBuffer GetImageCheckingForErrors() { var image = imageBuffer; @@ -877,7 +861,7 @@ namespace MatterHackers.MatterControl.DesignTools { if (property.PropertyInfo.GetCustomAttributes(true).OfType().FirstOrDefault() != null) { - rowContainer = GetImageSearchWidget(theme); + rowContainer = NewImageSearchWidget(theme); } else if(object3D is AssetObject3D assetObject && property.PropertyInfo.Name == "AssetPath") @@ -1117,7 +1101,7 @@ namespace MatterHackers.MatterControl.DesignTools return rowContainer; } - public static GuiWidget GetImageSearchWidget(ThemeConfig theme, string postPend = "silhouette") + public static GuiWidget NewImageSearchWidget(ThemeConfig theme, string postPend = "silhouette") { var searchRow = new FlowLayoutWidget() { diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index e084f2a9b..07f063560 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit e084f2a9b64b5e98827ee9929ff84f111a81a61c +Subproject commit 07f063560762f7762553f6cd67de90ed89fd8463