diff --git a/LegoArt/MainWindow.xaml b/LegoArt/MainWindow.xaml
index 9bacc80..d44654b 100644
--- a/LegoArt/MainWindow.xaml
+++ b/LegoArt/MainWindow.xaml
@@ -18,8 +18,8 @@
-
-
+
+
@@ -27,11 +27,16 @@
-
+
+
+
+
-
-
-
+
+
+
+
+
diff --git a/LegoArt/MainWindow.xaml.cs b/LegoArt/MainWindow.xaml.cs
index ad0595b..7e60ac1 100644
--- a/LegoArt/MainWindow.xaml.cs
+++ b/LegoArt/MainWindow.xaml.cs
@@ -9,6 +9,7 @@ using System.Windows.Media;
using Rectangle = System.Windows.Shapes.Rectangle;
using LegoArtTool.LegoArtColor;
using LegoArtTool.BuildingInstruction;
+using System.Diagnostics;
namespace LegoArt
{
@@ -23,6 +24,8 @@ namespace LegoArt
private readonly LegoArtImageGenerationService legoArtImageGenerationService;
private readonly BuildingInstructionService buildingInstructionService;
+ private string currentLegoArtSet;
+
public MainWindow()
{
InitializeComponent();
@@ -34,6 +37,7 @@ namespace LegoArt
buildingInstructionService = new BuildingInstructionService();
btnInstructionsPersister.Visibility = Visibility.Hidden;
+ currentLegoArtSet = legoArtColorService.LegoArtSets.First();
}
private void btnImageChooser_Click(object sender, RoutedEventArgs e)
@@ -73,7 +77,7 @@ namespace LegoArt
var d = new DataObject(DataFormats.Bitmap, legoArtImage.Source, true);
var legoArtBitmap = d.GetData(typeof(Bitmap)) as Bitmap;
- var buildingInstructionBitmap = buildingInstructionService.CreateBuildingInstructionImage(legoArtBitmap, legoArtColorService.GetLegoColors());
+ var buildingInstructionBitmap = buildingInstructionService.CreateBuildingInstructionImage(legoArtBitmap, legoArtColorService.GetLegoArtColorSet(currentLegoArtSet));
var outputPath = buildingInstructionService.PersistBuildingInstructions(buildingInstructionBitmap, tbImagePath.Text);
HideWaitCursor();
@@ -85,15 +89,18 @@ namespace LegoArt
{
var sourceBitmap = new Bitmap(path);
sourceImage.Source = imageHelperService.LoadToImage(bitmapHelperService.Scale(sourceBitmap, 1));
+ lblSourceImage.Visibility = Visibility.Visible;
- var reducedBitMap = legoArtImageGenerationService.GenerateLegoArtImageFromFullColorImage(sourceBitmap);
+ var reducedBitMap = legoArtImageGenerationService.GenerateLegoArtImageFromFullColorImage(sourceBitmap, currentLegoArtSet);
legoArtImage.Source = imageHelperService.LoadToImage(reducedBitMap);
+ lblLegoArtImage.Visibility = Visibility.Visible;
- var legoArtColors = legoArtColorService.ParseImage(reducedBitMap);
+ var legoArtColors = legoArtColorService.ParseImage(reducedBitMap, currentLegoArtSet);
if (legoArtColors != null)
{
btnInstructionsPersister.Visibility = Visibility.Visible;
-
+ lblLegoArtSet.Content = currentLegoArtSet;
+
parentStackPanel.Children.Clear();
AddLine(System.Drawing.Color.White, "Have", "Needed", "RGB", "#", "Difference", System.Drawing.Color.White);
diff --git a/LegoArtTool/BuildingInstruction/BuildingInstructionService.cs b/LegoArtTool/BuildingInstruction/BuildingInstructionService.cs
index a7c7069..6857dce 100644
--- a/LegoArtTool/BuildingInstruction/BuildingInstructionService.cs
+++ b/LegoArtTool/BuildingInstruction/BuildingInstructionService.cs
@@ -1,4 +1,5 @@
using LegoArtTool.LegoArtColor;
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
@@ -26,7 +27,7 @@ namespace LegoArtTool.BuildingInstruction
{
var rectangle = new Rectangle(w * segmentSize, h * segmentSize, segmentSize, segmentSize);
var segment = bitmap.Clone(rectangle, bitmap.PixelFormat);
- segment.Save($"{outPutDirectory}/{segmentNumber++}.png", ImageFormat.Png);
+ segment.Save($"{outPutDirectory}{Path.DirectorySeparatorChar}{segmentNumber++}.png", ImageFormat.Png);
}
}
@@ -51,7 +52,7 @@ namespace LegoArtTool.BuildingInstruction
{
var parent = Directory.GetParent(path);
var filename = Path.GetFileNameWithoutExtension(path);
- return increment == 0 ? $"{parent}/legoArtInstructions" : $"{parent}/legoArtInstructions_{filename} ({increment})";
+ return increment == 0 ? $"{parent}{Path.DirectorySeparatorChar}legoArtInstructions" : $"{parent}{Path.DirectorySeparatorChar}legoArtInstructions_{filename} ({increment})";
}
}
}
\ No newline at end of file
diff --git a/LegoArtTool/LegoArtColor/LegoArtColorService.cs b/LegoArtTool/LegoArtColor/LegoArtColorService.cs
index f19625e..d44f8e2 100644
--- a/LegoArtTool/LegoArtColor/LegoArtColorService.cs
+++ b/LegoArtTool/LegoArtColor/LegoArtColorService.cs
@@ -6,10 +6,16 @@ namespace LegoArtTool.LegoArtColor
{
public class LegoArtColorService
{
- public List GetLegoColors()
- {
- var legoColors = new List();
+ public List LegoArtSets { get; private set;}
+ private readonly Dictionary> legoArtColorSets;
+
+ public LegoArtColorService()
+ {
+ legoArtColorSets = new Dictionary>();
+
+ var key = "LEGO® Art The Beatles #31198";
+ var legoColors = new List();
legoColors.Add(new LegoArtColorInfo(Color.FromArgb(0, 0, 0), 1, 698));
legoColors.Add(new LegoArtColorInfo(Color.FromArgb(102, 101, 96), 2, 141));
legoColors.Add(new LegoArtColorInfo(Color.FromArgb(167, 166, 162), 3, 51));
@@ -25,13 +31,20 @@ namespace LegoArtTool.LegoArtColor
legoColors.Add(new LegoArtColorInfo(Color.FromArgb(206, 81, 0), 13, 85));
legoColors.Add(new LegoArtColorInfo(Color.FromArgb(119, 40, 0), 14, 250));
legoColors.Add(new LegoArtColorInfo(Color.FromArgb(66, 23, 3), 15, 554));
+ legoArtColorSets.Add(key, legoColors);
- return legoColors;
+ LegoArtSets = new List();
+ LegoArtSets.Add(key);
}
- public List ParseImage(Bitmap bitmap)
+ public List GetLegoArtColorSet(string legoArtSetKey)
{
- var parsedLegoColors = GetLegoColors();
+ return legoArtColorSets[legoArtSetKey];
+ }
+
+ public List ParseImage(Bitmap bitmap, string legoArtSetKey)
+ {
+ var parsedLegoColors = GetLegoArtColorSet(legoArtSetKey);
var width = bitmap.Width;
var height = bitmap.Height;
diff --git a/LegoArtTool/LegoArtImageGenerationService.cs b/LegoArtTool/LegoArtImageGenerationService.cs
index 8f3e7d8..def2e18 100644
--- a/LegoArtTool/LegoArtImageGenerationService.cs
+++ b/LegoArtTool/LegoArtImageGenerationService.cs
@@ -8,16 +8,17 @@ namespace LegoArtTool
{
public class LegoArtImageGenerationService
{
- private readonly List legoArtColorInfos;
+ private readonly LegoArtColorService legoArtColorService;
public LegoArtImageGenerationService()
{
- var legoArtColorService = new LegoArtColorService();
- legoArtColorInfos = legoArtColorService.GetLegoColors();
+ legoArtColorService = new LegoArtColorService();
}
- public Bitmap GenerateLegoArtImageFromFullColorImage(Bitmap bitmap)
+ public Bitmap GenerateLegoArtImageFromFullColorImage(Bitmap bitmap, string legoArtSetKey)
{
+ var legoArtColorInfos = legoArtColorService.GetLegoArtColorSet(legoArtSetKey);
+
var width = bitmap.Width;
var height = bitmap.Height;
@@ -28,7 +29,7 @@ namespace LegoArtTool
for (int w = 0; w < width; w++)
{
var color = bitmap.GetPixel(h, w);
- var pixel = MapPixel(color, h ,w);
+ var pixel = MapPixel(legoArtColorInfos, color, h ,w);
pixels.Add(pixel);
}
}
@@ -63,7 +64,7 @@ namespace LegoArtTool
return reducedBitmap;
}
- private Pixel MapPixel(Color inputColor, int xPosition, int yPosition)
+ private Pixel MapPixel(List legoArtColorInfos, Color inputColor, int xPosition, int yPosition)
{
var legoArtColorOffsets = legoArtColorInfos.Select(i => ColorDistance(inputColor, i)).ToList();
return new Pixel(xPosition, yPosition, legoArtColorOffsets);