C# :: Aufgabe #180 :: Lösung #1
3 Lösungen

#180
Farben/Pixel sortieren
Fortgeschrittener - C#
von KawaiiShox
- 29.06.2017 um 11:39 Uhr
Es soll ein Programm erstellt werden, welches zufällig erstellte Pixel nach der Farbe sortieren kann.
Das Programm soll dabei ungefähr so aussehen, wie auf Bild1.
Im ersten Teil der Aufgabe soll es , durch das Drücken eines Buttons, möglich sein ein Panel mit Pixeln, die alle eine zufällig generierte Farbe besitzen, zu füllen. (Bild2)
Als nächstes sollen dann alle Pixel des Panels sortiert werden(Bild3). In diesem Beispiel habe ich die Pixel nach ihrem "HUE" sortiert. Spannend wäre aber auch zu wissen, wie es aussieht, wenn man die Pixel nach einem anderem Kriterium sortiert.
Wer möchte, kann aber auch die Pixel eines bestimmten Bildes sortieren.
Das Programm soll dabei ungefähr so aussehen, wie auf Bild1.
Im ersten Teil der Aufgabe soll es , durch das Drücken eines Buttons, möglich sein ein Panel mit Pixeln, die alle eine zufällig generierte Farbe besitzen, zu füllen. (Bild2)
Als nächstes sollen dann alle Pixel des Panels sortiert werden(Bild3). In diesem Beispiel habe ich die Pixel nach ihrem "HUE" sortiert. Spannend wäre aber auch zu wissen, wie es aussieht, wenn man die Pixel nach einem anderem Kriterium sortiert.
Wer möchte, kann aber auch die Pixel eines bestimmten Bildes sortieren.
#1

von hollst (13980 Punkte)
- 19.07.2017 um 14:45 Uhr

using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace aufgabe_180_form { public partial class Form1 : Form { Random rand = new Random(); public Form1() { InitializeComponent(); comboBox1.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { Bitmap bm = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height); for(var i = 0; i < bm.Height; i++) for(var j = 0; j < bm.Width; j++) { Color c = Color.FromArgb(rand.Next(255), rand.Next(255), rand.Next(255)); bm.SetPixel(j, i, c); } pictureBox1.Image = bm; } private void button2_Click(object sender, EventArgs e) { Bitmap bm = new Bitmap(pictureBox1.Image), bm_sorted = new Bitmap(bm); for(var h = 0; h < bm.Height; h++) { Dictionary<int, double> d = new Dictionary<int, double>(); for (int x = 0; x < bm.Width; x++) switch (comboBox1.SelectedIndex) { case 0: d.Add(x, bm.GetPixel(x, h).GetHue()); break; case 1: d.Add(x, bm.GetPixel(x, h).GetBrightness()); break; case 2: d.Add(x, bm.GetPixel(x, h).R); break; case 3: d.Add(x, bm.GetPixel(x, h).G); break; case 4: d.Add(x, bm.GetPixel(x, h).B); break; } var items = from pair in d orderby pair.Value ascending select pair; int counter = 0; foreach (KeyValuePair<int, double> index_x in items) { bm_sorted.SetPixel(counter, h, bm.GetPixel(index_x.Key, h)); counter++; } pictureBox1.Image = bm_sorted; } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { this.pictureBox1.Focus(); } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1