Renamed stuff

This commit is contained in:
Claudio Schaad 2020-11-29 14:32:17 +01:00
parent 7beee13609
commit bd78a130ea
5 changed files with 84 additions and 65 deletions

View file

@ -30,38 +30,32 @@ namespace LegoArt
private void LoadImage(string path)
{
var legoColorService = new LegoColorService();
var bitmap = new System.Drawing.Bitmap(path);
var width = bitmap.Width;
var height = bitmap.Height;
for (int h = 0; h < height; h++)
var legoArtColorService = new LegoArtColorService();
var legoArtColors = legoArtColorService.ParseImage(path);
if (legoArtColors != null)
{
for (int w = 0; w < width; w++)
parentStackPanel.Children.Clear();
AddLine(System.Drawing.Color.White, "Have", "Needed", "RGB", "#", "Difference", System.Drawing.Color.White);
var sortedColors = legoArtColors.OrderBy(c => c.LegoNumber).ToList();
for (int i = 0; i < sortedColors.Count; i++)
{
var clr = bitmap.GetPixel(h, w);
var legoColorInfo = legoColorService.GetColorInfo(clr);
legoColorInfo.NeedCount++;
var color = sortedColors[i].Color;
var textRgb = $"{color.R};{color.G};{color.B}";
var difference = sortedColors[i].HaveCount - sortedColors[i].NeedCount;
var statusColor = difference < 0 ? System.Drawing.Color.Red : System.Drawing.Color.Green;
AddLine(color, sortedColors[i].HaveCount.ToString(), sortedColors[i].NeedCount.ToString(), textRgb, sortedColors[i].LegoNumber.ToString(), difference.ToString(), statusColor);
}
var have = legoArtColors.Sum(l => l.HaveCount);
var needed = legoArtColors.Sum(l => l.NeedCount);
AddLine(System.Drawing.Color.White, have.ToString(), needed.ToString(), "Total:", "", "", System.Drawing.Color.White);
}
parentStackPanel.Children.Clear();
AddLine(System.Drawing.Color.White, "Have", "Needed", "RGB", "#", "Difference", System.Drawing.Color.White);
var sortedColors = legoColorService.LegoColors.OrderBy(c => c.LegoNumber).ToList();
for (int i = 0; i < sortedColors.Count; i++)
else
{
var color = sortedColors[i].Color;
var textRgb = $"{color.R};{color.G};{color.B}";
var difference = sortedColors[i].HaveCount - sortedColors[i].NeedCount;
var statusColor = difference < 0 ? System.Drawing.Color.Red : System.Drawing.Color.Green;
AddLine(color, sortedColors[i].HaveCount.ToString(), sortedColors[i].NeedCount.ToString(), textRgb, sortedColors[i].LegoNumber.ToString(), difference.ToString(), statusColor);
MessageBox.Show("Image includes wrong colors", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
var have = legoColorService.LegoColors.Sum(l => l.HaveCount);
var needed = legoColorService.LegoColors.Sum(l => l.NeedCount);
AddLine(System.Drawing.Color.White, have.ToString(), needed.ToString(), "Total:", "", "", System.Drawing.Color.White);
}
private void AddLine(System.Drawing.Color color, string textHave, string textNeed, string textRgb, string textNumber, string textDifference, System.Drawing.Color statusColor)

View file

@ -2,14 +2,14 @@
namespace LegoArtTool
{
public class LegoColorInfo
public class LegoArtColorInfo
{
public Color Color { get; private set; }
public int LegoNumber { get; private set; }
public int HaveCount { get; private set; }
public int NeedCount { get; set; }
public LegoColorInfo(Color color, int number, int haveCount)
public LegoArtColorInfo(Color color, int number, int haveCount)
{
Color = color;
LegoNumber = number;

View file

@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
namespace LegoArtTool
{
public class LegoArtColorService
{
public static readonly List<LegoArtColorInfo> LegoColors;
static LegoArtColorService()
{
LegoColors = new List<LegoArtColorInfo>();
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));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(246, 246, 248), 4, 149));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(0, 53, 94), 5, 121));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(101, 135, 162), 6, 52));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(121, 196, 236), 7, 57));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(253, 104, 0), 8, 74));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(255, 170, 0), 9, 65));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(229, 205, 135), 10, 283));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(163, 129, 93), 11, 137));
LegoColors.Add(new LegoArtColorInfo(Color.FromArgb(196, 115, 54), 12, 29));
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));
}
public List<LegoArtColorInfo> ParseImage(string imagePath)
{
var parsedLegoColors = new List<LegoArtColorInfo>(LegoColors);
var bitmap = new Bitmap(imagePath);
var width = bitmap.Width;
var height = bitmap.Height;
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++)
{
var clr = bitmap.GetPixel(h, w);
var legoColorInfo = parsedLegoColors.SingleOrDefault(l => l.Color == clr);
if (legoColorInfo != null)
{
legoColorInfo.NeedCount++;
}
else
{
return null;
}
}
}
return parsedLegoColors;
}
}
}

View file

@ -4,4 +4,8 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
</ItemGroup>
</Project>

View file

@ -1,37 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
namespace LegoArtTool
{
public class LegoColorService
{
public List<LegoColorInfo> LegoColors { get; private set; }
public LegoColorService()
{
LegoColors = new List<LegoColorInfo>();
LegoColors.Add(new LegoColorInfo(Color.FromArgb(0, 0, 0), 1, 698));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(102, 101, 96), 2, 141));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(167, 166, 162), 3, 51));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(246, 246, 248), 4, 149));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(0, 53, 94), 5, 121));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(101, 135, 162), 6, 52));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(121, 196, 236), 7, 57));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(253, 104, 0), 8, 74));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(255, 170, 0), 9, 65));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(229, 205, 135), 10, 283));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(163, 129, 93), 11, 137));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(196, 115, 54), 12, 29));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(206, 81, 0), 13, 85));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(119, 40, 0), 14, 250));
LegoColors.Add(new LegoColorInfo(Color.FromArgb(66, 23, 3), 15, 554));
}
public LegoColorInfo GetColorInfo(Color color)
{
return LegoColors.Single(l => l.Color == color);
}
}
}