mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-08 17:42:31 +02:00
v0.4.2.2
* (Add) Shortcut "ESC" under Islands list view to deselect all items * (Add) Shortcut "CTRL+A" under Islands list view to select all items * (Add) Shortcut "*" under Islands list view to invert selection * (Add) Shortcut "CTRL+F" to go to a layer number * (Change) Layer image is now a RGB image for better manipulation and draws * (Change) Layer difference now shows previous and next layers (only pixels not present on current layer) were previous are pink and next are cyan, if a pixel are present in both layers a red pixel will be painted. * (Fix) Save modified layers on .cbddlp and .cbt corrupts the file to print when Anti-Aliasing is used (> 1) * (Fix) cbdlp layer encoding
This commit is contained in:
@@ -1,5 +1,16 @@
|
||||
# Changelog
|
||||
|
||||
## 05/06/2020 - v0.4.2.2 - Beta
|
||||
|
||||
* (Add) Shortcut "ESC" under Islands list view to deselect all items
|
||||
* (Add) Shortcut "CTRL+A" under Islands list view to select all items
|
||||
* (Add) Shortcut "*" under Islands list view to invert selection
|
||||
* (Add) Shortcut "CTRL+F" to go to a layer number
|
||||
* (Change) Layer image is now a RGB image for better manipulation and draws
|
||||
* (Change) Layer difference now shows previous and next layers (only pixels not present on current layer) were previous are pink and next are cyan, if a pixel are present in both layers a red pixel will be painted.
|
||||
* (Fix) Save modified layers on .cbddlp and .cbt corrupts the file to print when Anti-Aliasing is used (> 1)
|
||||
* (Fix) cbdlp layer encoding
|
||||
|
||||
## 04/06/2020 - v0.4.2.1 - Beta
|
||||
|
||||
* (Add) PrusaSlicer Printer "AnyCubic Photon"
|
||||
|
||||
@@ -713,39 +713,48 @@ namespace PrusaSL1Reader
|
||||
|
||||
HeaderSettings.LayersDefinitionOffsetAddress = currentOffset;
|
||||
uint layerDataCurrentOffset = currentOffset + (uint) Helpers.Serializer.SizeOf(new LayerData()) * HeaderSettings.LayerCount * HeaderSettings.AntiAliasLevel;
|
||||
for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
|
||||
|
||||
for (byte aaIndex = 0; aaIndex < HeaderSettings.AntiAliasLevel; aaIndex++)
|
||||
{
|
||||
LayerData layerData = new LayerData();
|
||||
LayerData layerDataHash = null;
|
||||
var image = this[layerIndex].Image;
|
||||
rawData = IsCbtFile ? EncodeCbtImage(image, layerIndex) : EncodeCbddlpImage(image);
|
||||
|
||||
var byteArr = rawData.ToArray();
|
||||
|
||||
if (HeaderSettings.EncryptionKey == 0)
|
||||
for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
|
||||
{
|
||||
string hash = Helpers.ComputeSHA1Hash(byteArr);
|
||||
if (!LayersHash.TryGetValue(hash, out layerDataHash))
|
||||
|
||||
LayerData layerData = new LayerData();
|
||||
LayerData layerDataHash = null;
|
||||
var image = this[layerIndex].Image;
|
||||
rawData = IsCbtFile ? EncodeCbtImage(image, layerIndex) : EncodeCbddlpImage(image, aaIndex);
|
||||
|
||||
var byteArr = rawData.ToArray();
|
||||
|
||||
if (HeaderSettings.EncryptionKey == 0)
|
||||
{
|
||||
LayersHash.Add(hash, layerData);
|
||||
string hash = Helpers.ComputeSHA1Hash(byteArr);
|
||||
if (!LayersHash.TryGetValue(hash, out layerDataHash))
|
||||
{
|
||||
LayersHash.Add(hash, layerData);
|
||||
}
|
||||
}
|
||||
|
||||
//layer.DataAddress = CurrentOffset + (uint)Helpers.Serializer.SizeOf(layer);
|
||||
layerData.DataAddress = layerDataHash?.DataAddress ?? layerDataCurrentOffset;
|
||||
layerData.DataSize = layerDataHash?.DataSize ?? (uint) byteArr.Length;
|
||||
layerData.LayerPositionZ = layerIndex * HeaderSettings.LayerHeightMilimeter;
|
||||
layerData.LayerOffTimeSeconds = layerIndex < HeaderSettings.BottomLayersCount
|
||||
? PrintParametersSettings.BottomLightOffDelay
|
||||
: PrintParametersSettings.LightOffDelay;
|
||||
layerData.LayerExposure = layerIndex < HeaderSettings.BottomLayersCount
|
||||
? HeaderSettings.BottomExposureSeconds
|
||||
: HeaderSettings.LayerExposureSeconds;
|
||||
LayersDefinitions[layerIndex, aaIndex] = layerData;
|
||||
|
||||
currentOffset += Helpers.SerializeWriteFileStream(outputFile, layerData);
|
||||
|
||||
if (!ReferenceEquals(layerDataHash, null)) continue;
|
||||
|
||||
outputFile.Seek(layerDataCurrentOffset, SeekOrigin.Begin);
|
||||
layerDataCurrentOffset += Helpers.WriteFileStream(outputFile, byteArr);
|
||||
outputFile.Seek(currentOffset, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
//layer.DataAddress = CurrentOffset + (uint)Helpers.Serializer.SizeOf(layer);
|
||||
layerData.DataAddress = layerDataHash?.DataAddress ?? layerDataCurrentOffset;
|
||||
layerData.DataSize = layerDataHash?.DataSize ?? (uint)byteArr.Length;
|
||||
layerData.LayerPositionZ = layerIndex * HeaderSettings.LayerHeightMilimeter;
|
||||
layerData.LayerOffTimeSeconds = layerIndex < HeaderSettings.BottomLayersCount ? PrintParametersSettings.BottomLightOffDelay : PrintParametersSettings.LightOffDelay;
|
||||
layerData.LayerExposure = layerIndex < HeaderSettings.BottomLayersCount ? HeaderSettings.BottomExposureSeconds : HeaderSettings.LayerExposureSeconds;
|
||||
LayersDefinitions[layerIndex, 0] = layerData;
|
||||
|
||||
currentOffset += Helpers.SerializeWriteFileStream(outputFile, layerData);
|
||||
|
||||
if (!ReferenceEquals(layerDataHash, null)) continue;
|
||||
|
||||
outputFile.Seek(layerDataCurrentOffset, SeekOrigin.Begin);
|
||||
layerDataCurrentOffset += Helpers.WriteFileStream(outputFile, byteArr);
|
||||
outputFile.Seek(currentOffset, SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
outputFile.Seek(0, SeekOrigin.Begin);
|
||||
@@ -764,11 +773,60 @@ namespace PrusaSL1Reader
|
||||
}
|
||||
}
|
||||
|
||||
private List<byte> EncodeCbddlpImage(Image<L8> image)
|
||||
private List<byte> EncodeCbddlpImage(Image<L8> image, byte aalevel)
|
||||
{
|
||||
List<byte> rawData = new List<byte>();
|
||||
|
||||
byte color;
|
||||
bool obit = false;
|
||||
int rep = 0;
|
||||
|
||||
void AddRep()
|
||||
{
|
||||
if (rep <= 0) return;
|
||||
|
||||
byte by = (byte) rep;
|
||||
|
||||
if (obit)
|
||||
{
|
||||
by |= 0x80;
|
||||
//bitsOn += uint(rep)
|
||||
}
|
||||
|
||||
rawData.Add(by);
|
||||
}
|
||||
|
||||
for (int y = 0; y < image.Height; y++)
|
||||
{
|
||||
Span<L8> pixelRowSpan = image.GetPixelRowSpan(y);
|
||||
for (int x = 0; x < image.Width; x++)
|
||||
{
|
||||
//ngrey:= uint16(r | g | b)
|
||||
|
||||
var nbit = (pixelRowSpan[x].PackedValue & (1 << (int)(8 - HeaderSettings.AntiAliasLevel + aalevel))) != 0;
|
||||
|
||||
if (nbit == obit)
|
||||
{
|
||||
rep++;
|
||||
|
||||
if (rep == RLE8EncodingLimit)
|
||||
{
|
||||
AddRep();
|
||||
rep = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AddRep();
|
||||
obit = nbit;
|
||||
rep = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Collect stragglers
|
||||
AddRep();
|
||||
|
||||
/*byte color;
|
||||
byte black = 0;
|
||||
byte white = 1;
|
||||
|
||||
@@ -796,7 +854,7 @@ namespace PrusaSL1Reader
|
||||
nrOfColor = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
return rawData;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace PrusaSL1Reader
|
||||
public static class Helpers
|
||||
{
|
||||
public static PngEncoder PngEncoder { get; } = new PngEncoder();
|
||||
public static BmpEncoder BmpEncoder { get; } = new BmpEncoder();
|
||||
public static BmpEncoder BmpEncoder { get; } = new BmpEncoder{SupportTransparency = true, BitsPerPixel = BmpBitsPerPixel.Pixel32};
|
||||
/// <summary>
|
||||
/// Gets the <see cref="BinarySerializer"/> instance
|
||||
/// </summary>
|
||||
|
||||
@@ -123,6 +123,11 @@ namespace PrusaSL1Reader
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a new RGBA image instance
|
||||
/// </summary>
|
||||
public Image<Rgba32> ImageRbga32 => Image.CloneAs<Rgba32>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<PackageProjectUrl>https://github.com/sn4k3/PrusaSL1Viewer</PackageProjectUrl>
|
||||
<PackageIcon></PackageIcon>
|
||||
<RepositoryUrl>https://github.com/sn4k3/PrusaSL1Viewer</RepositoryUrl>
|
||||
<AssemblyVersion>0.4.2.1</AssemblyVersion>
|
||||
<FileVersion>0.4.2.1</FileVersion>
|
||||
<Version>0.4.2.1</Version>
|
||||
<AssemblyVersion>0.4.2.2</AssemblyVersion>
|
||||
<FileVersion>0.4.2.2</FileVersion>
|
||||
<Version>0.4.2.2</Version>
|
||||
<Description>Open, view, edit, extract and convert DLP/SLA files generated from Slicers</Description>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
Generated
+13
-11
@@ -28,10 +28,11 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmInputBox));
|
||||
this.lbDescription = new System.Windows.Forms.Label();
|
||||
this.lbCurrentValue = new System.Windows.Forms.Label();
|
||||
this.tbCurrentValue = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.lbNewValue = new System.Windows.Forms.Label();
|
||||
this.numNewValue = new System.Windows.Forms.NumericUpDown();
|
||||
this.btnModify = new System.Windows.Forms.Button();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
@@ -73,15 +74,15 @@
|
||||
this.tbCurrentValue.Size = new System.Drawing.Size(376, 26);
|
||||
this.tbCurrentValue.TabIndex = 2;
|
||||
//
|
||||
// label1
|
||||
// lbNewValue
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(13, 189);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(89, 20);
|
||||
this.label1.TabIndex = 3;
|
||||
this.label1.Text = "New Value:";
|
||||
this.lbNewValue.AutoSize = true;
|
||||
this.lbNewValue.Location = new System.Drawing.Point(13, 189);
|
||||
this.lbNewValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.lbNewValue.Name = "lbNewValue";
|
||||
this.lbNewValue.Size = new System.Drawing.Size(89, 20);
|
||||
this.lbNewValue.TabIndex = 3;
|
||||
this.lbNewValue.Text = "New Value:";
|
||||
//
|
||||
// numNewValue
|
||||
//
|
||||
@@ -136,12 +137,13 @@
|
||||
this.Controls.Add(this.btnModify);
|
||||
this.Controls.Add(this.btnCancel);
|
||||
this.Controls.Add(this.numNewValue);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.lbNewValue);
|
||||
this.Controls.Add(this.tbCurrentValue);
|
||||
this.Controls.Add(this.lbCurrentValue);
|
||||
this.Controls.Add(this.lbDescription);
|
||||
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.KeyPreview = true;
|
||||
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.MaximizeBox = false;
|
||||
@@ -161,7 +163,7 @@
|
||||
private System.Windows.Forms.Label lbDescription;
|
||||
private System.Windows.Forms.Label lbCurrentValue;
|
||||
private System.Windows.Forms.TextBox tbCurrentValue;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label lbNewValue;
|
||||
private System.Windows.Forms.NumericUpDown numNewValue;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Button btnModify;
|
||||
|
||||
@@ -50,17 +50,20 @@ namespace PrusaSL1Viewer
|
||||
|
||||
}
|
||||
|
||||
public FrmInputBox(FileFormat.PrintParameterModifier modifier, decimal currentValue) : this(modifier.Name,
|
||||
modifier.Description, currentValue, modifier.ValueUnit, modifier.Minimum, modifier.Maximum)
|
||||
public FrmInputBox(FileFormat.PrintParameterModifier modifier, decimal currentValue, byte decimals = 2) : this(modifier.Name,
|
||||
modifier.Description, currentValue, modifier.ValueUnit, modifier.Minimum, modifier.Maximum, decimals)
|
||||
{ }
|
||||
public FrmInputBox(string title, string description, decimal currentValue, string valueUnit = null, decimal minValue = 0, decimal maxValue = 100) : this()
|
||||
public FrmInputBox(string title, string description, decimal currentValue, string valueUnit = null, decimal minValue = 0, decimal maxValue = 100, byte decimals = 2, string valueLabel = "Value") : this()
|
||||
{
|
||||
Text = title;
|
||||
lbCurrentValue.Text = $"Current {valueLabel}";
|
||||
lbNewValue.Text = $"New {valueLabel}";
|
||||
Description = description;
|
||||
ValueUint = valueUnit ?? string.Empty;
|
||||
CurrentValue = currentValue;
|
||||
numNewValue.Minimum = minValue;
|
||||
numNewValue.Maximum = maxValue;
|
||||
numNewValue.DecimalPlaces = decimals;
|
||||
NewValue = currentValue;
|
||||
}
|
||||
#endregion
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Generated
+1
@@ -946,6 +946,7 @@
|
||||
this.lvIslands.View = System.Windows.Forms.View.Details;
|
||||
this.lvIslands.ItemActivate += new System.EventHandler(this.lvIslands_ItemActivate);
|
||||
this.lvIslands.SelectedIndexChanged += new System.EventHandler(this.lvIslands_SelectedIndexChanged);
|
||||
this.lvIslands.KeyUp += new System.Windows.Forms.KeyEventHandler(this.EventKeyUp);
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
|
||||
+167
-54
@@ -93,7 +93,7 @@ namespace PrusaSL1Viewer
|
||||
set => Program.SlicerFile = value;
|
||||
}
|
||||
|
||||
public uint ActualLayer => (uint)(sbLayers.Maximum - sbLayers.Value);
|
||||
public uint ActualLayer { get; set; }
|
||||
|
||||
public Image<L8> ActualLayerImage { get; private set; }
|
||||
|
||||
@@ -142,18 +142,39 @@ namespace PrusaSL1Viewer
|
||||
{
|
||||
base.OnKeyUp(e);
|
||||
|
||||
if (e.KeyCode == Keys.R && e.Control)
|
||||
if (ReferenceEquals(SlicerFile, null))
|
||||
{
|
||||
tsLayerImageRotate.PerformClick();
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((e.KeyCode == Keys.NumPad0 || e.KeyCode == Keys.D0) && e.Control)
|
||||
if (e.Control)
|
||||
{
|
||||
pbLayer.ZoomToFit();
|
||||
e.Handled = true;
|
||||
return;
|
||||
if (e.KeyCode == Keys.F)
|
||||
{
|
||||
using (FrmInputBox inputBox = new FrmInputBox("Go to layer", "Select a layer index to go to.", ActualLayer, null, 0, SlicerFile.LayerCount-1, 0, "Layer"))
|
||||
{
|
||||
if (inputBox.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
ShowLayer((uint)inputBox.NewValue);
|
||||
}
|
||||
}
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.KeyCode == Keys.R)
|
||||
{
|
||||
tsLayerImageRotate.PerformClick();
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.KeyCode == Keys.NumPad0 || e.KeyCode == Keys.D0)
|
||||
{
|
||||
pbLayer.ZoomToFit();
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -488,7 +509,7 @@ namespace PrusaSL1Viewer
|
||||
|
||||
FrmLoading.ShowDialog();
|
||||
|
||||
ShowLayer(ActualLayer);
|
||||
ShowLayer();
|
||||
|
||||
ComputeIslands();
|
||||
|
||||
@@ -825,7 +846,7 @@ namespace PrusaSL1Viewer
|
||||
***********************/
|
||||
if (ReferenceEquals(sender, tsLayerImageRotate) || ReferenceEquals(sender, tsLayerImageLayerDifference) || ReferenceEquals(sender, tsLayerImageHighlightIslands) || ReferenceEquals(sender, tsLayerImageLayerOutline))
|
||||
{
|
||||
sbLayers_ValueChanged(sbLayers, null);
|
||||
ShowLayer();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -861,7 +882,8 @@ namespace PrusaSL1Viewer
|
||||
|
||||
private void sbLayers_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
ShowLayer(ActualLayer);
|
||||
ActualLayer = (uint) (sbLayers.Maximum - sbLayers.Value);
|
||||
ShowLayer();
|
||||
}
|
||||
|
||||
private void ConvertToItemOnClick(object sender, EventArgs e)
|
||||
@@ -905,10 +927,10 @@ namespace PrusaSL1Viewer
|
||||
});
|
||||
|
||||
FrmLoading.ShowDialog();
|
||||
|
||||
|
||||
if (task.Result)
|
||||
{
|
||||
if (MessageBox.Show($"Convertion is completed: {Path.GetFileName(dialog.FileName)} in {FrmLoading.StopWatch.ElapsedMilliseconds/1000}s\n" +
|
||||
if (MessageBox.Show($"Convertion is completed: {Path.GetFileName(dialog.FileName)} in {FrmLoading.StopWatch.ElapsedMilliseconds / 1000}s\n" +
|
||||
"Do you want open the converted file in a new window?",
|
||||
"Convertion completed", MessageBoxButtons.YesNo,
|
||||
MessageBoxIcon.Information) == DialogResult.Yes)
|
||||
@@ -924,7 +946,7 @@ namespace PrusaSL1Viewer
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void pbLayer_Zoomed(object sender, Cyotek.Windows.Forms.ImageBoxZoomEventArgs e)
|
||||
{
|
||||
tsLayerImageZoom.Text = $"Zoom: {e.NewZoom}% ({e.NewZoom/100f}x)";
|
||||
@@ -1350,9 +1372,25 @@ namespace PrusaSL1Viewer
|
||||
AddStatusBarItem(nameof(SlicerFile.MachineName), SlicerFile.MachineName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reshow current layer
|
||||
/// </summary>
|
||||
void ShowLayer() => ShowLayer(ActualLayer);
|
||||
|
||||
/// <summary>
|
||||
/// Shows a layer number
|
||||
/// </summary>
|
||||
/// <param name="layerNum">Layer number</param>
|
||||
void ShowLayer(uint layerNum)
|
||||
{
|
||||
if (ReferenceEquals(SlicerFile, null)) return;
|
||||
int layerOnSlider = (int)(SlicerFile.LayerCount - layerNum - 1);
|
||||
if (sbLayers.Value != layerOnSlider)
|
||||
{
|
||||
sbLayers.Value = layerOnSlider;
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// OLD
|
||||
@@ -1363,31 +1401,78 @@ namespace PrusaSL1Viewer
|
||||
|
||||
|
||||
Stopwatch watch = Stopwatch.StartNew();
|
||||
var image = SlicerFile[layerNum].Image;
|
||||
ActualLayerImage = image.Clone();
|
||||
ActualLayerImage = SlicerFile[layerNum].Image;
|
||||
//ActualLayerImage = image;
|
||||
|
||||
var imageRgba = ActualLayerImage.CloneAs<Rgba32>();
|
||||
|
||||
if (tsLayerImageLayerOutline.Checked)
|
||||
{
|
||||
Image<Gray, byte> grayscale = image.ToEmguImage();
|
||||
Image<Gray, byte> grayscale = ActualLayerImage.ToEmguImage();
|
||||
grayscale = grayscale.Canny(100, 200, 3, true);
|
||||
image = grayscale.ToImageSharpL8();
|
||||
imageRgba = grayscale.ToImageSharpL8().CloneAs<Rgba32>();
|
||||
grayscale.Dispose();
|
||||
/*imageRgba.Mutate(imgMaskIn =>
|
||||
{
|
||||
imgMaskIn.DetectEdges();
|
||||
});*/
|
||||
}
|
||||
else if (tsLayerImageLayerDifference.Checked)
|
||||
{
|
||||
if (layerNum > 0)
|
||||
if (layerNum > 0 && layerNum < SlicerFile.LayerCount-1)
|
||||
{
|
||||
var previousImage = SlicerFile[layerNum-1].Image;
|
||||
var nextImage = SlicerFile[layerNum+1].Image;
|
||||
/*var newImage = new Image<Rgba32>(previousImage.Width, previousImage.Height);
|
||||
|
||||
Parallel.For(0, ActualLayerImage.Height, y => {
|
||||
var newImageSpan = newImage.GetPixelRowSpan(y);
|
||||
var previousImageSpan = previousImage.GetPixelRowSpan(y);
|
||||
for (int x = 0; x < ActualLayerImage.Width; x++)
|
||||
{
|
||||
if (previousImageSpan[x].PackedValue == 0) continue;
|
||||
newImageSpan[x] = new Rgba32(0, 0, previousImageSpan[x].PackedValue);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
imageRgba.Mutate(imgMaskIn =>
|
||||
{
|
||||
imgMaskIn.DrawImage(newImage, PixelColorBlendingMode.Normal, 0.7f);
|
||||
});*/
|
||||
|
||||
//var nextImage = SlicerFile.GetLayerImage(layerNum+1);
|
||||
|
||||
Parallel.For(0, image.Height, y => {
|
||||
var imageSpan = image.GetPixelRowSpan(y);
|
||||
Parallel.For(0, ActualLayerImage.Height, y => {
|
||||
var imageSpan = imageRgba.GetPixelRowSpan(y);
|
||||
var previousImageSpan = previousImage.GetPixelRowSpan(y);
|
||||
for (int x = 0; x < image.Width; x++)
|
||||
var nextImageSpan = nextImage.GetPixelRowSpan(y);
|
||||
for (int x = 0; x < ActualLayerImage.Width; x++)
|
||||
{
|
||||
if (imageSpan[x].PackedValue == 0 || previousImageSpan[x].PackedValue == 0) continue;
|
||||
imageSpan[x].PackedValue = (byte)(previousImageSpan[x].PackedValue / 2);
|
||||
if (imageSpan[x].PackedValue == 4278190080)
|
||||
{
|
||||
if (previousImageSpan[x].PackedValue > 0 && nextImageSpan[x].PackedValue > 0)
|
||||
{
|
||||
imageSpan[x] = new Rgba32(255, 0, 0);
|
||||
}
|
||||
else if (previousImageSpan[x].PackedValue > 0)
|
||||
{
|
||||
imageSpan[x] = new Rgba32(previousImageSpan[x].PackedValue, 0, previousImageSpan[x].PackedValue);
|
||||
}
|
||||
else if (nextImageSpan[x].PackedValue > 0)
|
||||
{
|
||||
imageSpan[x] = new Rgba32(0, nextImageSpan[x].PackedValue, nextImageSpan[x].PackedValue);
|
||||
}
|
||||
}
|
||||
/*else
|
||||
{
|
||||
if (previousImageSpan[x].PackedValue > 0 && nextImageSpan[x].PackedValue > 0)
|
||||
{
|
||||
imageSpan[x] = new Rgba32(225, 225, 225);
|
||||
}
|
||||
}*/
|
||||
|
||||
//if (previousImageSpan[x].PackedValue == 0) continue;
|
||||
//imageSpan[x] = new Rgba32(0, 0, 255, 50);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1405,17 +1490,6 @@ namespace PrusaSL1Viewer
|
||||
}
|
||||
}
|
||||
|
||||
if (tsLayerImageRotate.Checked)
|
||||
{
|
||||
//watch.Restart();
|
||||
image.Mutate(x => x.Rotate(RotateMode.Rotate90));
|
||||
//Debug.Write($"/{watch.ElapsedMilliseconds}");
|
||||
}
|
||||
|
||||
//watch.Restart();
|
||||
var imageBmp = image.ToBitmap();
|
||||
|
||||
|
||||
if (tsLayerImageHighlightIslands.Checked && !ReferenceEquals(Islands, null) && Islands.Count > ActualLayer)
|
||||
{
|
||||
var islands = Islands[ActualLayer];
|
||||
@@ -1425,27 +1499,27 @@ namespace PrusaSL1Viewer
|
||||
if (ReferenceEquals(island, null)) continue; // Removed islands
|
||||
foreach (var pixel in island)
|
||||
{
|
||||
int x = pixel.X;
|
||||
int y = pixel.Y;
|
||||
|
||||
if (tsLayerImageRotate.Checked)
|
||||
{
|
||||
x = ActualLayerImage.Height - 1 - pixel.Y;
|
||||
y = pixel.X;
|
||||
}
|
||||
|
||||
var alpha = ActualLayerImage[pixel.X, pixel.Y].PackedValue;
|
||||
if (alpha == 0) continue;
|
||||
// alpha, Color.Yellow
|
||||
alpha = Math.Max((byte)70, alpha);
|
||||
imageBmp.SetPixel(x, y, Color.FromArgb(alpha, alpha, 0));
|
||||
imageRgba[pixel.X, pixel.Y] = new Rgba32(alpha, alpha, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tsLayerImageRotate.Checked)
|
||||
{
|
||||
//watch.Restart();
|
||||
imageRgba.Mutate(x => x.Rotate(RotateMode.Rotate90));
|
||||
//Debug.Write($"/{watch.ElapsedMilliseconds}");
|
||||
}
|
||||
|
||||
//watch.Restart();
|
||||
var imageBmp = imageRgba.ToBitmap();
|
||||
//imageBmp.MakeTransparent();
|
||||
pbLayer.Image = imageBmp;
|
||||
pbLayer.Image.Tag = image;
|
||||
pbLayer.Image.Tag = imageRgba;
|
||||
//Debug.WriteLine(watch.ElapsedMilliseconds);
|
||||
|
||||
//UniversalLayer layer = new UniversalLayer(image);
|
||||
@@ -1506,9 +1580,51 @@ namespace PrusaSL1Viewer
|
||||
{
|
||||
scLeft.SplitterDistance = Math.Min(pbThumbnail.Image.Height + 5, 400);
|
||||
}
|
||||
|
||||
private void lvIslands_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
tsIslandsRemove.Enabled = lvIslands.SelectedIndices.Count > 0;
|
||||
}
|
||||
|
||||
private void EventKeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (ReferenceEquals(sender, lvIslands))
|
||||
{
|
||||
if (e.KeyCode == Keys.Escape)
|
||||
{
|
||||
foreach (ListViewItem item in lvIslands.Items)
|
||||
{
|
||||
item.Selected = false;
|
||||
}
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.Control && e.KeyCode == Keys.A)
|
||||
{
|
||||
foreach (ListViewItem item in lvIslands.Items)
|
||||
{
|
||||
item.Selected = true;
|
||||
}
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.KeyCode == Keys.Multiply)
|
||||
{
|
||||
foreach (ListViewItem item in lvIslands.Items)
|
||||
{
|
||||
item.Selected = !item.Selected;
|
||||
}
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
void DrawPixel(bool isAdd, Point location)
|
||||
{
|
||||
@@ -1657,7 +1773,7 @@ namespace PrusaSL1Viewer
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"{ex.Message}\nPlease try diferent values for the mutation", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
MessageBox.Show($"{ex.Message}\nPlease try different values for the mutation", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -1672,7 +1788,7 @@ namespace PrusaSL1Viewer
|
||||
|
||||
FrmLoading.ShowDialog();
|
||||
|
||||
ShowLayer(ActualLayer);
|
||||
ShowLayer();
|
||||
|
||||
menuFileSave.Enabled =
|
||||
menuFileSaveAs.Enabled = true;
|
||||
@@ -1774,9 +1890,6 @@ namespace PrusaSL1Viewer
|
||||
UpdateIslandsInfo();
|
||||
}
|
||||
|
||||
private void lvIslands_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
tsIslandsRemove.Enabled = lvIslands.SelectedIndices.Count > 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+29
-32
@@ -126,6 +126,12 @@
|
||||
<metadata name="tsLayer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>201, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsThumbnails.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>291, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsProperties.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>649, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsGCode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>551, 17</value>
|
||||
</metadata>
|
||||
@@ -140,61 +146,61 @@
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2
|
||||
DQAAAk1TRnQBSQFMAgEBBAEAAYABAgGAAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
DQAAAk1TRnQBSQFMAgEBBAEAAZgBAgGYAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AZgADUAGjA1IBqQNS
|
||||
AakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1ABo1wAAxYBHgMjATMDIwEz
|
||||
AyMBMwMjATMDGAEhAwIBAwwAA1UBtANZAccDLwFJAwABAQMbASYDHAEnAxwBJwMcAScDHAEnAxwBJwMc
|
||||
AScDHAEnAxwBJwMcAScDHAEnAwIBAwQAA1IBqTAAA1IBqRAAAycBOgMwAUwDMAFMAzABTAMwAUwDMAFM
|
||||
AzABTAMwAUwDMAFMAycBOhwAAwQBBgMjATMDUgGpAbMBUQEXAf8BsgFQARUB/wGyAU8BFQH/AbMBUAEW
|
||||
AzABTAMwAUwDMAFMAycBOhwAAwQBBgMjATMDUgGpAbMBTgEUAf8BsgFNARIB/wGyAUwBEgH/AbMBTQET
|
||||
Af8CWAFWAbkDKQE/AwQBBgsAAf8DAAH/A0MBdwMpAT4DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
|
||||
AwAB/wMAAf8DAAH/AwAB/wMyAVEEAANSAakEAANQAZ0DUwGqA1MBqgNTAaoDUwGqA1MBqgNTAaoDUAGd
|
||||
DAADUgGpEAADTgH7AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DTgH7GAADBQEHAzABTAGz
|
||||
AVABFgH/AdkBswGMAf8B9QHfAcUB/wH+Ae4B2AH/Af4B7gHYAf8B+gHnAc8B/wHZAbMBjAH/AbMBUAEV
|
||||
AU0BEwH/AdkBswGMAf8B9QHfAcUB/wH+Ae4B2AH/Af4B7gHYAf8B+gHnAc8B/wHZAbMBjAH/AbMBTQES
|
||||
Af8CMQEwAU0DAgEDBAADUQGiA1YBtgMqAUAEAAMQARUDEQEXAxEBFwMRARcDEQEXAxEBFwMRARcDEQEX
|
||||
AxEBFwMRARcDEAEWCAADUgGpBAADUAGdA1MBqgNTAaoDHwEsHAADUgGpEwAB/wMAAf8DAAH/AwAB/wMA
|
||||
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/xgAAjEBMAFNAbcBgQEfAf8B6gHNAawB/wH6AeUBywH/AfgB4QHG
|
||||
Af8B9gHgAcQB/wH2Ad8BxAH/AfcB4QHFAf8B+gHlAcsB/wHvAdUBtwH/AbMBUAEWAf8DIAEuBAADCgEO
|
||||
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/xgAAjEBMAFNAbcBgQEcAf8B6gHNAawB/wH6AeUBywH/AfgB4QHG
|
||||
Af8B9gHgAcQB/wH2Ad8BxAH/AfcB4QHFAf8B+gHlAcsB/wHvAdUBtwH/AbMBTQETAf8DIAEuBAADCgEO
|
||||
AxEBFwMAAQE4AANSAakwAANSAakTAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
|
||||
GAACagFEAfkB5QHHAaQB/wH3Ad8BwgH/AfMB2wG7Af8B8wHaAbsB/wHzAdsBvAH/AfMB2wG8Af8B8wHb
|
||||
AbwB/wHzAdwBvQH/AfYB4QHDAf8B1QGvAYQB/wJYAVYBuQQAA1IB9AMAAf8DPgFsAw4BEwNCAXYDQwF3
|
||||
A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQgF2AxQBGwQAA1IBqQMiATIDUgGpA1IBqQNS
|
||||
AakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpAyIBMgNSAakTAAH/AwAB/wMAAf8DAAH/AwAB/wMA
|
||||
Af8DAAH/AwAB/wMAAf8DAAH/GAABtAFSARgC/wHwAdwC/wHvAdwB/wH+AesB1wH/AfkB5AHKAf8B8QHW
|
||||
AbQB/wHxAdYBswH/AfEB1gG0Af8B8QHWAbQB/wHyAdgBtgH/AfMB2QG3Af8BswFSARgB/wcAAf4DAAH/
|
||||
Af8DAAH/AwAB/wMAAf8DAAH/GAABtAFPARUC/wHwAdwC/wHvAdwB/wH+AesB1wH/AfkB5AHKAf8B8QHW
|
||||
AbQB/wHxAdYBswH/AfEB1gG0Af8B8QHWAbQB/wHyAdgBtgH/AfMB2QG3Af8BswFPARUB/wcAAf4DAAH/
|
||||
A0MBdwMeASsDVwHFA1kBxwNZAccDWQHHA1kBxwNZAccDWQHHA1kBxwNZAccDWQHHA1gBxgMmATkEAANS
|
||||
AakDNAFVAzQBVSAAAzQBVQM0AVUDUgGpEwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
|
||||
AwAB/xgAA0gBhQG4AYIBHwH/AccBlwE7Af8BzwGlAU0B/wHtAdIBtAH/Af0B6AHSAf8B7wHSAa0B/wHu
|
||||
AdIBrAH/Ae4B0gGtAf8B7gHSAa0B/wH1AdwBvAH/AbMBUAEXAf8EAAMzAVMDPAFnAxQBHDgAA1IBqQM0
|
||||
AwAB/xgAA0gBhQG4AYIBHAH/AccBlwE4Af8BzwGlAUoB/wHtAdIBtAH/Af0B6AHSAf8B7wHSAa0B/wHu
|
||||
AdIBrAH/Ae4B0gGtAf8B7gHSAa0B/wH1AdwBvAH/AbMBTQEUAf8EAAMzAVMDPAFnAxQBHDgAA1IBqQM0
|
||||
AVUDNAFVA0YBgANSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNFAX8DNAFVAzQBVQNSAakTAAH/AwAB/wMA
|
||||
Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/EAADCgEOAyEBMQMjATMDIwEzAjEBMAFNAzMBUwGz
|
||||
AU8BEgH/AeMBxQGiAf8B+QHjAckB/wHrAc4BpAH/AesBzgGmAf8B6wHOAaUB/wH3Ad8BwAH/AbMBUAEW
|
||||
AUwBDwH/AeMBxQGiAf8B+QHjAckB/wHrAc4BpAH/AesBzgGmAf8B6wHOAaUB/wH3Ad8BwAH/AbMBTQET
|
||||
Af8EAAMzAVMDPAFnAxQBHDgAA1IBqQM0AVUDNAFVAz8BbgMyAVAQAAMnATsDRAF8AzQBVQM0AVUDUgGp
|
||||
EwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwAAwoBDgM/AW0DXAH4AYUBiQGN
|
||||
Af8BUgFVAYQB/wNfAfMDOgFiAwkBDAGzAU8BEgH/Ae0B0QG0Af8B6QHJAZ0B/wHpAckBnQH/AekByAGb
|
||||
Af8B/AHoAdIB/wGzAVEBFwH/BwAB/gMAAf8DQwF3Ax8BLANXAcUDWQHHA1kBxwNZAccDWQHHA1kBxwNZ
|
||||
Af8BTwFSAYQB/wNfAfMDOgFiAwkBDAGzAUwBDwH/Ae0B0QG0Af8B6QHJAZ0B/wHpAckBnQH/AekByAGb
|
||||
Af8B/AHoAdIB/wGzAU4BFAH/BwAB/gMAAf8DQwF3Ax8BLANXAcUDWQHHA1kBxwNZAccDWQHHA1kBxwNZ
|
||||
AccDWQHHA1kBxwNZAccDWAHGAyYBOQQAA1IBqQM0AVUDNAFVAwUBBwNVAbUDEQEXA1IBqQMpAT4EAANQ
|
||||
AZ8DEQEXAzQBVQM0AVUDUgGpEwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwA
|
||||
Az4BawOAAf8C0gHRAf8B7wHuAe0B/wLvAe4B/wHSAdMB0gH/AVQBgAGBAf8DOgFgAzIBUAHQAacBUgH/
|
||||
Az4BawOAAf8C0gHRAf8B7wHuAe0B/wLvAe4B/wHSAdMB0gH/AVEBgAGBAf8DOgFgAzIBUAHQAacBTwH/
|
||||
AeoByQGcAf8B5AHDAZIB/wHyAdcBtQH/AdoBtgGQAf8CUwFSAagEAANSAfQDAAH/Az4BbAMOARMDQgF1
|
||||
A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwMUARsEAANSAakDNAFVAzQBVQQA
|
||||
AzwBaANWAb4DIwE0A1UBtQMSARkDUQGgBAADNAFVAzQBVQNSAakTAAH/AwAB/wMAAf8DAAH/AwAB/wMA
|
||||
Af8DAwH/AwgB/wMIAf8DXAHfDAADXAH4As0BzAH/AeMB4gHhAf8B3wHeAd0B/wHfAd4B3QH/AeMB4gHh
|
||||
Af8DzAH/A2cB8gMZASMByAGYAT4B/wHzAdoBtwH/AfEB1gGyAf8B/gHtAdkB/wG3AYEBHgH/AwoBDQQA
|
||||
Af8DAAH/AwUB/wMFAf8DXAHfDAADXAH4As0BzAH/AeMB4gHhAf8B3wHeAd0B/wHfAd4B3QH/AeMB4gHh
|
||||
Af8DzAH/A2cB8gMZASMByAGYATsB/wHzAdoBtwH/AfEB1gGyAf8B/gHtAdkB/wG3AYEBGwH/AwoBDQQA
|
||||
AwoBDgMRARcDAAEBOAADUgGpAzQBVQM0AVUDAAEBAy0BRgMKAQ4EAAM5AV8DXAHOAygBPAQAAzQBVQM0
|
||||
AVUDUgGpEwAB/wOCAf8DHgH/AwgB/wMAAf8DAAH/AxIB/wMZAf8DXAHfAxcBIAwAA08B/wHjAeIB4QH/
|
||||
AdcB1gHUAf8B1wHWAdQB/wHXAdYB1AH/AdcB1gHUAf8B4gHhAeAB/wGDAYgBjQH/BAABtwGAARsC/wHw
|
||||
AdwB/wH6AeYBzgH/AcEBkAEyAf8DQAFuCAADUQGiA1YBtgMqAUAEAAMQARUDEQEXAxEBFwMRARcDEQEX
|
||||
AVUDUgGpEwAB/wOCAf8DGwH/AwUB/wMAAf8DAAH/Aw8B/wMWAf8DXAHfAxcBIAwAA0wB/wHjAeIB4QH/
|
||||
AdcB1gHUAf8B1wHWAdQB/wHXAdYB1AH/AdcB1gHUAf8B4gHhAeAB/wGDAYgBjQH/BAABtwGAARgC/wHw
|
||||
AdwB/wH6AeYBzgH/AcEBkAEvAf8DQAFuCAADUQGiA1YBtgMqAUAEAAMQARUDEQEXAxEBFwMRARcDEQEX
|
||||
AxEBFwMRARcDEQEXAxEBFwMRARcDEAEWCAADUgGpAzQBVQM0AVUDMwFTA1IBpgNKAYwHAAEBA0cBgwgA
|
||||
AzQBVQM0AVUDUgGpEwAB/wOZAf8DhQH/AysB/wMAAf8DAAH/AxIB/wNcAd8DFwEgEAADTwH/AfIB8QHw
|
||||
Af8BzwHNAcsB/wHQAc4BywH/AdABzgHLAf8BzwHNAcsB/wHyAvAB/wFTAYEBhQH/BAADNwFbAbQBUgEY
|
||||
Af8BtAFSARcB/wNAAW8PAAH/AwAB/wNDAXcDKQE+AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
|
||||
AzQBVQM0AVUDUgGpEwAB/wOZAf8DhQH/AygB/wMAAf8DAAH/Aw8B/wNcAd8DFwEgEAADTAH/AfIB8QHw
|
||||
Af8BzwHNAcsB/wHQAc4BywH/AdABzgHLAf8BzwHNAcsB/wHyAvAB/wFQAYEBhQH/BAADNwFbAbQBTwEV
|
||||
Af8BtAFPARQB/wNAAW8PAAH/AwAB/wNDAXcDKQE+AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
|
||||
Af8DAAH/AwAB/wMAAf8DMgFRBAADUgGpAzQBVQM0AVUDEQEXA1ABngMkATYUAAM0AVUDNAFVA1IBqRAA
|
||||
A1AB+wMKAf8DCgH/AwoB/wMAAf8DAAH/A1wB3wMXASAUAANiAfYB2wLaAf8B6AHnAeYB/wHRAc8BzgH/
|
||||
A1AB+wMHAf8DBwH/AwcB/wMAAf8DAAH/A1wB3wMXASAUAANiAfYB2wLaAf8B6AHnAeYB/wHRAc8BzgH/
|
||||
AdEBzwHOAf8B6AHnAeYB/wHbAtoB/wNiAfYgAANVAbQDWQHHAy8BSQMAAQEDGwEmAxwBJwMcAScDHAEn
|
||||
AxwBJwMcAScDHAEnAxwBJwMcAScDHAEnAxwBJwMCAQMEAANSAakDIgEyA1IBqQNSAakDUgGpA1IBqQNS
|
||||
AakDUgGpA1IBqQNSAakDUgGpA1IBqQMiATIDUgGpEAADIAEuAykBPwMpAT8DKQE/AykBPwMpAT8DEQEX
|
||||
GAADLgFIA4AB/wHYAtcB/wH3AvYB/wH3AvYB/wHYAtcB/wOAAf8DLgFIZAADUAGjA1IBqQNSAakDUgGp
|
||||
A1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1ABo0gAAy4BSANiAfYDTgH/A04B/wNi
|
||||
A1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1ABo0gAAy4BSANiAfYDSwH/A0sB/wNi
|
||||
AfYDLgFIJAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAv8BgAEBAv8B/AEH
|
||||
AgABvwH9AeABBwHwAQMCAAGgAR0B4AEHAeABAQEQAQEBoQH9AeABBwHgAQEBHwH/Ab8B/QHgAQcB4AEB
|
||||
AgABgAEBAeABBwHgAQECAAGPAfEB4AEHAeABAQEfAf8BgAEBAeABBwGAAQEBHwH/AYMBwQHgAQcBAAEB
|
||||
@@ -202,15 +208,6 @@
|
||||
AgABgQHxAeABHwEAAf8CAAGAAQEB4AE/AQAD/wGAAQEC/wGBAf8L
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="tsThumbnails.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>291, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsProperties.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>649, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsGCode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>551, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace PrusaSL1Viewer
|
||||
using (var memoryStream = new MemoryStream())
|
||||
{
|
||||
//var imageEncoder = image.GetConfiguration().ImageFormatsManager.FindEncoder(SixLabors.ImageSharp.Formats.Bmp.BmpFormat.Instance);
|
||||
Helpers.BmpEncoder.SupportTransparency = true;
|
||||
image.Save(memoryStream, Helpers.BmpEncoder);
|
||||
|
||||
//memoryStream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.4.2.1")]
|
||||
[assembly: AssemblyFileVersion("0.4.2.1")]
|
||||
[assembly: AssemblyVersion("0.4.2.2")]
|
||||
[assembly: AssemblyFileVersion("0.4.2.2")]
|
||||
|
||||
Reference in New Issue
Block a user