diff --git a/LegoArt/MainWindow.xaml b/LegoArt/MainWindow.xaml
index e8fbe00..9bacc80 100644
--- a/LegoArt/MainWindow.xaml
+++ b/LegoArt/MainWindow.xaml
@@ -31,7 +31,7 @@
-
+
diff --git a/LegoArt/MainWindow.xaml.cs b/LegoArt/MainWindow.xaml.cs
index 0f397c4..ad0595b 100644
--- a/LegoArt/MainWindow.xaml.cs
+++ b/LegoArt/MainWindow.xaml.cs
@@ -7,6 +7,8 @@ using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using Rectangle = System.Windows.Shapes.Rectangle;
+using LegoArtTool.LegoArtColor;
+using LegoArtTool.BuildingInstruction;
namespace LegoArt
{
@@ -19,6 +21,7 @@ namespace LegoArt
private readonly BitmapHelperService bitmapHelperService;
private readonly ImageHelperService imageHelperService;
private readonly LegoArtImageGenerationService legoArtImageGenerationService;
+ private readonly BuildingInstructionService buildingInstructionService;
public MainWindow()
{
@@ -28,6 +31,7 @@ namespace LegoArt
bitmapHelperService = new BitmapHelperService();
imageHelperService = new ImageHelperService();
legoArtImageGenerationService = new LegoArtImageGenerationService();
+ buildingInstructionService = new BuildingInstructionService();
btnInstructionsPersister.Visibility = Visibility.Hidden;
}
@@ -39,43 +43,55 @@ namespace LegoArt
{
tbImagePath.Text = openFileDialog.FileName;
- Application.Current.Dispatcher.Invoke(() =>
- {
- Mouse.OverrideCursor = Cursors.Wait;
- });
+ ShowWaitCursor();
LoadImage(openFileDialog.FileName);
- Application.Current.Dispatcher.Invoke(() =>
- {
- Mouse.OverrideCursor = null;
- });
+ HideWaitCursor();
}
}
+ private void ShowWaitCursor()
+ {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ Mouse.OverrideCursor = Cursors.Wait;
+ });
+ }
+
+ private void HideWaitCursor()
+ {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ Mouse.OverrideCursor = null;
+ });
+ }
+
private void btnInstructionsPersister_Click(object sender, RoutedEventArgs e)
{
- var d = new DataObject(DataFormats.Bitmap, scaledImage.Source, true);
- var bitmap = d.GetData(typeof(Bitmap)) as Bitmap;
- var outputPath = BuildingInstructionService.PersistBuildingInstructions(bitmap, tbImagePath.Text);
- MessageBox.Show($"Instructions saved to {outputPath}", "Saved", MessageBoxButton.OK, MessageBoxImage.Information);
+ ShowWaitCursor();
+ 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 outputPath = buildingInstructionService.PersistBuildingInstructions(buildingInstructionBitmap, tbImagePath.Text);
+
+ HideWaitCursor();
+
+ MessageBox.Show($"Instructions saved to {outputPath}", "Saved", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void LoadImage(string path)
{
- var bitmap = new System.Drawing.Bitmap(path);
- var reducedBitMap = legoArtImageGenerationService.GenerateLegoArtImageFromFullColorImage(bitmap);
+ var sourceBitmap = new Bitmap(path);
+ sourceImage.Source = imageHelperService.LoadToImage(bitmapHelperService.Scale(sourceBitmap, 1));
+
+ var reducedBitMap = legoArtImageGenerationService.GenerateLegoArtImageFromFullColorImage(sourceBitmap);
+ legoArtImage.Source = imageHelperService.LoadToImage(reducedBitMap);
var legoArtColors = legoArtColorService.ParseImage(reducedBitMap);
if (legoArtColors != null)
- {
- var sourceBitmap = bitmapHelperService.Scale(reducedBitMap, 1);
- sourceImage.Source = imageHelperService.LoadToImage(sourceBitmap);
-
- var convertedBitmap = bitmapHelperService.ConvertToPixelMatrix(sourceBitmap, legoArtColorService.GetLegoColors());
- scaledImage.Source = imageHelperService.LoadToImage(convertedBitmap);
-
+ {
btnInstructionsPersister.Visibility = Visibility.Visible;
parentStackPanel.Children.Clear();
diff --git a/LegoArtTool/BitmapHelperService.cs b/LegoArtTool/BitmapHelperService.cs
index 7d979ce..454ff1e 100644
--- a/LegoArtTool/BitmapHelperService.cs
+++ b/LegoArtTool/BitmapHelperService.cs
@@ -1,6 +1,4 @@
-using LegoArtTool.Pixels;
-using System.Collections.Generic;
-using System.Drawing;
+using System.Drawing;
namespace LegoArtTool
{
@@ -29,11 +27,5 @@ namespace LegoArtTool
return scaledBitmap;
}
-
- public Bitmap ConvertToPixelMatrix(Bitmap bitmap, List legoArtColors)
- {
- var pixelMatrix = new PixelMatrix(bitmap, legoArtColors);
- return pixelMatrix.ConvertBitmap();
- }
}
}
diff --git a/LegoArtTool/Pixels/Pixel.cs b/LegoArtTool/BuildingInstruction/BuildingInstructionElement.cs
similarity index 88%
rename from LegoArtTool/Pixels/Pixel.cs
rename to LegoArtTool/BuildingInstruction/BuildingInstructionElement.cs
index 1ddc3d2..641d76c 100644
--- a/LegoArtTool/Pixels/Pixel.cs
+++ b/LegoArtTool/BuildingInstruction/BuildingInstructionElement.cs
@@ -1,8 +1,8 @@
using System.Drawing;
-namespace LegoArtTool.Pixels
+namespace LegoArtTool.BuildingInstruction
{
- public class Pixel
+ public class BuildingInstructionElement
{
public Color Color { get; private set; }
public int Number { get; private set; }
@@ -10,7 +10,7 @@ namespace LegoArtTool.Pixels
public const int PixelSize = 50;
private const int NumberSize = 20;
- public Pixel(Color color, int number)
+ public BuildingInstructionElement(Color color, int number)
{
Color = color;
Number = number;
diff --git a/LegoArtTool/Pixels/PixelMatrix.cs b/LegoArtTool/BuildingInstruction/BuildingInstructionMatrix.cs
similarity index 63%
rename from LegoArtTool/Pixels/PixelMatrix.cs
rename to LegoArtTool/BuildingInstruction/BuildingInstructionMatrix.cs
index 2a709db..a194aaa 100644
--- a/LegoArtTool/Pixels/PixelMatrix.cs
+++ b/LegoArtTool/BuildingInstruction/BuildingInstructionMatrix.cs
@@ -1,21 +1,19 @@
-using System;
+using LegoArtTool.LegoArtColor;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
-namespace LegoArtTool.Pixels
+namespace LegoArtTool.BuildingInstruction
{
- public class PixelMatrix
+ public class BuildingInstructionMatrix
{
- public Pixel[,] Pixels { get; private set; }
+ public BuildingInstructionElement[,] Pixels { get; private set; }
public int MatrixSize { get; private set; }
- private Random rnd = new Random();
-
- public PixelMatrix(Bitmap sourceBitmap, List legoArtColors)
+ public BuildingInstructionMatrix(Bitmap sourceBitmap, List legoArtColors)
{
MatrixSize = sourceBitmap.Width;
- Pixels = new Pixel[MatrixSize, MatrixSize];
+ Pixels = new BuildingInstructionElement[MatrixSize, MatrixSize];
for (int x = 0; x < MatrixSize; x++)
{
@@ -24,14 +22,14 @@ namespace LegoArtTool.Pixels
var pixel = sourceBitmap.GetPixel(x, y);
var sourceColor = Color.FromArgb(pixel.ToArgb());
var legoNumber = legoArtColors.Single(l => l.Color == sourceColor).LegoNumber;
- Pixels[x, y] = new Pixel(sourceColor, legoNumber);
+ Pixels[x, y] = new BuildingInstructionElement(sourceColor, legoNumber);
}
}
}
- public Bitmap ConvertBitmap()
+ public Bitmap GetBitmap()
{
- var bitmapSize = MatrixSize * Pixel.PixelSize;
+ var bitmapSize = MatrixSize * BuildingInstructionElement.PixelSize;
var bitmap = new Bitmap(bitmapSize, bitmapSize);
using (var g = Graphics.FromImage(bitmap))
{
@@ -47,11 +45,5 @@ namespace LegoArtTool.Pixels
return bitmap;
}
-
- private Color GetRandomColor()
- {
- Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
- return randomColor;
- }
}
}
diff --git a/LegoArtTool/BuildingInstructionService.cs b/LegoArtTool/BuildingInstruction/BuildingInstructionService.cs
similarity index 67%
rename from LegoArtTool/BuildingInstructionService.cs
rename to LegoArtTool/BuildingInstruction/BuildingInstructionService.cs
index 7c28e1b..a7c7069 100644
--- a/LegoArtTool/BuildingInstructionService.cs
+++ b/LegoArtTool/BuildingInstruction/BuildingInstructionService.cs
@@ -1,12 +1,20 @@
-using System.Drawing;
+using LegoArtTool.LegoArtColor;
+using System.Collections.Generic;
+using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
-namespace LegoArtTool
+namespace LegoArtTool.BuildingInstruction
{
- public static class BuildingInstructionService
+ public class BuildingInstructionService
{
- public static string PersistBuildingInstructions(Bitmap bitmap, string path)
+ public Bitmap CreateBuildingInstructionImage(Bitmap bitmap, List legoArtColors)
+ {
+ var pixelMatrix = new BuildingInstructionMatrix(bitmap, legoArtColors);
+ return pixelMatrix.GetBitmap();
+ }
+
+ public string PersistBuildingInstructions(Bitmap bitmap, string path)
{
var segmentSize = bitmap.Width / 3;
var outPutDirectory = CreateOutPutDirectory(path);
@@ -25,7 +33,7 @@ namespace LegoArtTool
return outPutDirectory;
}
- private static string CreateOutPutDirectory(string path)
+ private string CreateOutPutDirectory(string path)
{
var increment = 0;
@@ -39,7 +47,7 @@ namespace LegoArtTool
return outputDirectoryPath;
}
- private static string GetOutputDirectoryPath(int increment, string path)
+ private string GetOutputDirectoryPath(int increment, string path)
{
var parent = Directory.GetParent(path);
var filename = Path.GetFileNameWithoutExtension(path);
diff --git a/LegoArtTool/Pixels/GraphicExtensions.cs b/LegoArtTool/BuildingInstruction/GraphicExtensions.cs
similarity index 97%
rename from LegoArtTool/Pixels/GraphicExtensions.cs
rename to LegoArtTool/BuildingInstruction/GraphicExtensions.cs
index 3f3472e..d5b907e 100644
--- a/LegoArtTool/Pixels/GraphicExtensions.cs
+++ b/LegoArtTool/BuildingInstruction/GraphicExtensions.cs
@@ -1,7 +1,7 @@
using System.Drawing;
using System.Drawing.Drawing2D;
-namespace LegoArtTool.Pixels
+namespace LegoArtTool.BuildingInstruction
{
public static class GraphicsExtensions
{
diff --git a/LegoArtTool/LegoArtColorInfo.cs b/LegoArtTool/LegoArtColor/LegoArtColorInfo.cs
similarity index 93%
rename from LegoArtTool/LegoArtColorInfo.cs
rename to LegoArtTool/LegoArtColor/LegoArtColorInfo.cs
index 833c591..15c10e6 100644
--- a/LegoArtTool/LegoArtColorInfo.cs
+++ b/LegoArtTool/LegoArtColor/LegoArtColorInfo.cs
@@ -1,6 +1,6 @@
using System.Drawing;
-namespace LegoArtTool
+namespace LegoArtTool.LegoArtColor
{
public class LegoArtColorInfo
{
diff --git a/LegoArtTool/LegoArtColorOffset.cs b/LegoArtTool/LegoArtColor/LegoArtColorOffset.cs
similarity index 92%
rename from LegoArtTool/LegoArtColorOffset.cs
rename to LegoArtTool/LegoArtColor/LegoArtColorOffset.cs
index 161cf6c..2656d9b 100644
--- a/LegoArtTool/LegoArtColorOffset.cs
+++ b/LegoArtTool/LegoArtColor/LegoArtColorOffset.cs
@@ -1,4 +1,4 @@
-namespace LegoArtTool
+namespace LegoArtTool.LegoArtColor
{
public class LegoArtColorOffset
{
@@ -12,7 +12,5 @@
LegoArtColorInfo = legoArtColorInfo;
IsAvailable = true;
}
-
-
}
}
\ No newline at end of file
diff --git a/LegoArtTool/LegoArtColorService.cs b/LegoArtTool/LegoArtColor/LegoArtColorService.cs
similarity index 98%
rename from LegoArtTool/LegoArtColorService.cs
rename to LegoArtTool/LegoArtColor/LegoArtColorService.cs
index 2145b3a..f19625e 100644
--- a/LegoArtTool/LegoArtColorService.cs
+++ b/LegoArtTool/LegoArtColor/LegoArtColorService.cs
@@ -2,7 +2,7 @@
using System.Linq;
using System.Drawing;
-namespace LegoArtTool
+namespace LegoArtTool.LegoArtColor
{
public class LegoArtColorService
{
diff --git a/LegoArtTool/Pixel.cs b/LegoArtTool/LegoArtColor/Pixel.cs
similarity index 91%
rename from LegoArtTool/Pixel.cs
rename to LegoArtTool/LegoArtColor/Pixel.cs
index 8798af2..85e02ed 100644
--- a/LegoArtTool/Pixel.cs
+++ b/LegoArtTool/LegoArtColor/Pixel.cs
@@ -1,15 +1,15 @@
using System.Collections.Generic;
-namespace LegoArtTool
+namespace LegoArtTool.LegoArtColor
{
public class Pixel
- {
+ {
public int X { get; private set; }
public int Y { get; private set; }
public List LegoArtColorOffsets { get; private set; }
-
+
public bool IsAssigned { get; set; }
-
+
public Pixel(int x, int y, List legoArtColorOffsets)
{
X = x;
@@ -17,6 +17,5 @@ namespace LegoArtTool
LegoArtColorOffsets = legoArtColorOffsets;
IsAssigned = false;
}
-
}
}
\ No newline at end of file
diff --git a/LegoArtTool/LegoArtImageGenerationService.cs b/LegoArtTool/LegoArtImageGenerationService.cs
index 15b605b..8f3e7d8 100644
--- a/LegoArtTool/LegoArtImageGenerationService.cs
+++ b/LegoArtTool/LegoArtImageGenerationService.cs
@@ -1,4 +1,5 @@
-using System;
+using LegoArtTool.LegoArtColor;
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;