Making a separate display image to show binary alpha and outline
This commit is contained in:
parent
93735995b7
commit
419ebd12d5
2 changed files with 48 additions and 17 deletions
|
|
@ -55,19 +55,19 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
|
||||
public event EventHandler EditComplete;
|
||||
|
||||
public void RebuildAlphaImage(ImageBuffer sourceImage, ImageBuffer alphaImage, ImageToPathObject3D_2.AnalysisTypes analysisType)
|
||||
public void RebuildAlphaImage(ImageBuffer sourceImage, ImageBuffer alphaImage, ImageBuffer displayImage, ImageToPathObject3D_2.AnalysisTypes analysisType)
|
||||
{
|
||||
if (analysisType == ImageToPathObject3D_2.AnalysisTypes.Colors)
|
||||
{
|
||||
RebuildColorToAlphaImage(sourceImage, alphaImage);
|
||||
RebuildColorToAlphaImage(sourceImage, alphaImage, displayImage);
|
||||
}
|
||||
else
|
||||
{
|
||||
RebuildIntensityToAlphaImage(sourceImage, alphaImage);
|
||||
RebuildIntensityToAlphaImage(sourceImage, alphaImage, displayImage);
|
||||
}
|
||||
}
|
||||
|
||||
private void RebuildIntensityToAlphaImage(ImageBuffer sourceImage, ImageBuffer alphaImage)
|
||||
private void RebuildIntensityToAlphaImage(ImageBuffer sourceImage, ImageBuffer alphaImage, ImageBuffer displayImage)
|
||||
{
|
||||
if (sourceImage == null)
|
||||
{
|
||||
|
|
@ -75,14 +75,11 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
}
|
||||
|
||||
// build the alpha image
|
||||
if (alphaImage == null)
|
||||
{
|
||||
alphaImage = new ImageBuffer(sourceImage.Width, sourceImage.Height);
|
||||
}
|
||||
else if (alphaImage.Width != sourceImage.Width
|
||||
if (alphaImage.Width != sourceImage.Width
|
||||
|| alphaImage.Height != sourceImage.Height)
|
||||
{
|
||||
alphaImage.Allocate(sourceImage.Width, sourceImage.Height, sourceImage.BitDepth, sourceImage.GetRecieveBlender());
|
||||
displayImage.Allocate(sourceImage.Width, sourceImage.Height, sourceImage.BitDepth, sourceImage.GetRecieveBlender());
|
||||
}
|
||||
|
||||
var startInt = (int)(RangeStart * 255);
|
||||
|
|
@ -103,9 +100,13 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
}
|
||||
else
|
||||
{
|
||||
var s1 = 255 - Math.Min(255, ((alpha - startInt) * 255 / rangeInt));
|
||||
if (rangeInt > 64)
|
||||
{
|
||||
var s1 = 255 - Math.Min(255, ((alpha - startInt) * 255 / rangeInt));
|
||||
return (byte)s1;
|
||||
}
|
||||
|
||||
return (byte)s1;
|
||||
return 255;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -129,6 +130,30 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
});
|
||||
|
||||
alphaImage.MarkImageChanged();
|
||||
|
||||
byte[] displayBuffer = displayImage.GetBuffer();
|
||||
Parallel.For(0, sourceImage.Height, (y) =>
|
||||
{
|
||||
int imageOffset = displayImage.GetBufferOffsetY(y);
|
||||
|
||||
for (int x = 0; x < displayImage.Width; x++)
|
||||
{
|
||||
int imageBufferOffsetWithX = imageOffset + x * 4;
|
||||
displayBuffer[imageBufferOffsetWithX + 0] = destBuffer[imageBufferOffsetWithX + 0];
|
||||
displayBuffer[imageBufferOffsetWithX + 1] = destBuffer[imageBufferOffsetWithX + 1];
|
||||
displayBuffer[imageBufferOffsetWithX + 2] = destBuffer[imageBufferOffsetWithX + 2];
|
||||
if (destBuffer[imageBufferOffsetWithX + 3] > 1)
|
||||
{
|
||||
displayBuffer[imageBufferOffsetWithX + 3] = 255;
|
||||
}
|
||||
else
|
||||
{
|
||||
displayBuffer[imageBufferOffsetWithX + 3] = 0;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
displayImage.MarkImageChanged();
|
||||
}
|
||||
|
||||
private static (float hue, float saturation) GetHue(byte bR, byte bG, byte bB)
|
||||
|
|
@ -211,7 +236,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
return 0;
|
||||
}
|
||||
|
||||
private void RebuildColorToAlphaImage(ImageBuffer sourceImage, ImageBuffer alphaImage)
|
||||
private void RebuildColorToAlphaImage(ImageBuffer sourceImage, ImageBuffer alphaImage, ImageBuffer displayImage)
|
||||
{
|
||||
if (sourceImage == null)
|
||||
{
|
||||
|
|
@ -251,6 +276,8 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
//});
|
||||
|
||||
alphaImage.MarkImageChanged();
|
||||
|
||||
displayImage.CopyFrom(alphaImage);
|
||||
}
|
||||
|
||||
class QuickHue : IThresholdFunction
|
||||
|
|
|
|||
|
|
@ -66,6 +66,8 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
Intensity,
|
||||
}
|
||||
|
||||
private ImageBuffer alphaImage;
|
||||
|
||||
private ImageBuffer _image;
|
||||
/// <summary>
|
||||
/// This is the image after it has been processed into an alpha image
|
||||
|
|
@ -80,10 +82,11 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
&& SourceImage != null)
|
||||
{
|
||||
_image = new ImageBuffer(SourceImage);
|
||||
alphaImage = new ImageBuffer(SourceImage);
|
||||
Histogram.BuildHistogramFromImage(SourceImage, AnalysisType);
|
||||
Histogram.RangeChanged += (s, e) =>
|
||||
{
|
||||
Histogram.RebuildAlphaImage(SourceImage, _image, AnalysisType);
|
||||
Histogram.RebuildAlphaImage(SourceImage, alphaImage, _image, AnalysisType);
|
||||
};
|
||||
|
||||
Histogram.EditComplete += (s, e) =>
|
||||
|
|
@ -94,7 +97,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
switch (AnalysisType)
|
||||
{
|
||||
case AnalysisTypes.Intensity:
|
||||
Histogram.RebuildAlphaImage(SourceImage, _image, AnalysisType);
|
||||
Histogram.RebuildAlphaImage(SourceImage, alphaImage, _image, AnalysisType);
|
||||
break;
|
||||
|
||||
case AnalysisTypes.Transparency:
|
||||
|
|
@ -134,7 +137,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
case AnalysisTypes.Intensity:
|
||||
case AnalysisTypes.Colors:
|
||||
Histogram.BuildHistogramFromImage(sourceImage, AnalysisType);
|
||||
Histogram.RebuildAlphaImage(sourceImage, Image, AnalysisType);
|
||||
Histogram.RebuildAlphaImage(sourceImage, alphaImage, Image, AnalysisType);
|
||||
break;
|
||||
|
||||
case AnalysisTypes.Transparency:
|
||||
|
|
@ -245,7 +248,8 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
if (AnalysisType != AnalysisTypes.Transparency)
|
||||
{
|
||||
Histogram.BuildHistogramFromImage(SourceImage, AnalysisType);
|
||||
Histogram.RebuildAlphaImage(SourceImage, _image, AnalysisType);
|
||||
var _ = Image; // call this to make sure it is built
|
||||
Histogram.RebuildAlphaImage(SourceImage, alphaImage, Image, AnalysisType);
|
||||
}
|
||||
await Rebuild();
|
||||
}
|
||||
|
|
@ -296,7 +300,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
|||
progressStatus.Status = status;
|
||||
reporter.Report(progressStatus);
|
||||
},
|
||||
Image,
|
||||
alphaImage,
|
||||
new AlphaFunction());
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue