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) private void LoadImage(string path)
{ {
var legoColorService = new LegoColorService(); var legoArtColorService = new LegoArtColorService();
var legoArtColors = legoArtColorService.ParseImage(path);
var bitmap = new System.Drawing.Bitmap(path); if (legoArtColors != null)
var width = bitmap.Width;
var height = bitmap.Height;
for (int h = 0; h < height; h++)
{ {
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 color = sortedColors[i].Color;
var legoColorInfo = legoColorService.GetColorInfo(clr); var textRgb = $"{color.R};{color.G};{color.B}";
legoColorInfo.NeedCount++; 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);
} }
else
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++)
{ {
var color = sortedColors[i].Color; MessageBox.Show("Image includes wrong colors", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
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 = 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) 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 namespace LegoArtTool
{ {
public class LegoColorInfo public class LegoArtColorInfo
{ {
public Color Color { get; private set; } public Color Color { get; private set; }
public int LegoNumber { get; private set; } public int LegoNumber { get; private set; }
public int HaveCount { get; private set; } public int HaveCount { get; private set; }
public int NeedCount { get; set; } public int NeedCount { get; set; }
public LegoColorInfo(Color color, int number, int haveCount) public LegoArtColorInfo(Color color, int number, int haveCount)
{ {
Color = color; Color = color;
LegoNumber = number; 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> <TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
</ItemGroup>
</Project> </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);
}
}
}