Hallo
Wie erstelle ich in C# ein graphisches Plasma?
Habe folgenden Code, welcher aber nur ein Standbild erzeugt.
Für ein Beispiel oder einen Link wäre ich dankbar.
DSS
Bitmap bm = new Bitmap(pictureBoxMain.Image);
Bitmap newBitmap = new Bitmap(bm.Width, bm.Height);
for (int y = 0; y < newBitmap.Height; y++)
{
for (int x = 0; x < newBitmap.Width; x++)
{
int color = (int)(128.0 + (128.0 * Math.Sin((x) / 8.0)));
newBitmap.SetPixel(x, y, Color.FromArgb(color, color, color));
}
}
pictureBoxMain.Image = newBitmap;
Woran hapert es?
Es hat mich keine Minute gekostet um mit Google eine Ahnung zu bekommen, was der Plasma Effekt ist, und kurz danach hatte ich Java und JavaScript Code. Von da sollte es nicht mehr weit sein.
Google Suche nach "plasma effect code" => erstes Ergebnis, RosettaCode
Auf den ersten Blick schön erklärt Making plasma effects
Hallo,
du meinst eine Animation? Dann benötigst du einen Timer
, der alle x ms das Bild neu berechnet und anzeigt.
Für Windows Forms: Timer
Dabei aber nicht vergessen, die BitMap wieder per Dispose frei zu geben.
Sonst schaufelst du unmengen an Handle in deine Anwendung bis es eine OutOfMemory Exception gibt!
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Da sich die Größe der Bitmap dabei nicht ändert, sollte man nur einmalig diese erzeugen (und nur jeweils die Pixeldaten ändern).
Hallo,
du meinst eine Animation? Dann benötigst du einen
Timer
, der alle x ms das Bild neu berechnet und anzeigt.
Für Windows Forms:
>
Egal ob mit oder ohne Timer, das Bild wird sich mit seinem Code oben nicht ändern. Es macht natürlich trotzdem Sinn einen Timer zu benutzen.
Das Beispiel von Roseattacode hat leider kein C#-Beispiel.
Nach meiner Vermutung muss ich was mit der Funktion BitmapData was anstellen, diese Methode wurde schon angesprochen, nur wie sieht es nun wirklich aus?
DSS
Wenn ich den Java Code von RosettaCode.org anschaue, steht dort vor dem Timer ein Kommentar
// animate about 24 fps and shift hue value with every frame
Jetzt weißt du, was.du machen musst.
Durch diese Webseite wurde ich schlauer:
https://github.com/stevereaver/plasma/blob/master/plasma.cpp