This repository has been archived on 2025-10-15. You can view files and clone it, but cannot push or open issues or pull requests.
Files
ConvertTo16x16/Program.cs
2020-06-25 13:12:33 +02:00

116 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
namespace ConvertTo16x16
{
class Count
{
public int Argb { get; set; }
public Point Position { get; set; }
public int Anzahl { get; set; }
public Count(int Anzahl)
{
this.Anzahl = Anzahl;
}
public Count(int Argb, Point Position, int Anzahl)
{
this.Argb = Argb;
this.Position = Position;
this.Anzahl = Anzahl;
}
}
class Program
{
static void Main(string[] args)
{
//C:\Users\zamk\Bilder\RickNice.jpg
Console.Write("Geben sie den Bildnamen an: ");
string bildName = Console.ReadLine();
Console.Write("Geben sie den Pfad an: ");
string Pfad = Console.ReadLine();
//string Pfad = @"D:\Pictures16";
//string bildName = "RickNice.jpg";
int PixelAnzahl = 16;
Bitmap bmp = new Bitmap($@"{Pfad}\{bildName}");
Bitmap outcome = new Bitmap(PixelAnzahl, PixelAnzahl);
int Width = bmp.Width / PixelAnzahl;
int Height = bmp.Height / PixelAnzahl;
int counter = 0;
Console.Write("Performing some task... ");
using (var progress = new ProgressBar())
{
for (int i = 0; i < PixelAnzahl; i++)
{
for (int j = 0; j < PixelAnzahl; j++)
{
List<Count> Argb = new List<Count>();
for (int x = Width * i; x < Width * (i + 1); x++)
{
for (int y = Height * j; y < Height * (j + 1); y++)
{
bool Exists = false;
foreach (var item in Argb)
{
if (bmp.GetPixel(x, y).ToArgb() == item.Argb) //Zu switch case umbauen
{
Exists = true;
item.Anzahl += 1;
}
}
if (!Exists)
{
Argb.Add(new Count(bmp.GetPixel(x, y).ToArgb(), new Point(x, y), 1));
}
counter++;
double report = Convert.ToDouble(counter) / Convert.ToDouble(16 * 16 * Width * Height);
progress.Report(report);
}
}
Count BiggestItem = new Count(0);
foreach (var item in Argb)
{
if (item.Anzahl > BiggestItem.Anzahl)
{
BiggestItem = item;
}
}
outcome.SetPixel(i, j, Color.FromArgb(BiggestItem.Argb));
}
}
}
outcome.Save($@"{Pfad}\16x16{bildName}");
}
}
}