Laden...

Wie Plasma Effekt via Bitmap erzeugen?

Erstellt von DSS vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.243 Views
D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 2 Jahren
Wie Plasma Effekt via Bitmap erzeugen?

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;

J
61 Beiträge seit 2020
vor 2 Jahren

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

4.938 Beiträge seit 2008
vor 2 Jahren

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

T
2.222 Beiträge seit 2008
vor 2 Jahren

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.

4.938 Beiträge seit 2008
vor 2 Jahren

Da sich die Größe der Bitmap dabei nicht ändert, sollte man nur einmalig diese erzeugen (und nur jeweils die Pixeldaten ändern).

J
61 Beiträge seit 2020
vor 2 Jahren

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.

D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 2 Jahren

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

J
61 Beiträge seit 2020
vor 2 Jahren

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.

D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 2 Jahren

Durch diese Webseite wurde ich schlauer:
https://github.com/stevereaver/plasma/blob/master/plasma.cpp