• Ich habe lange schon nicht mehr zu GDI+ gepostet. Hier eine kleine Spielerei zu Wellensimulation (sieht schick aus :) ) .

    Mit diesen Einstellungen läuft's bei mir mit ca. 15-17 FPS :whistling: .

    Wave v1.2.1
    Wave v1.2.1.jpg

    Wave v1.3.1
    Wave v1.3.1.jpg

    Wave v1.3.2 (extrem langsam!)
    Wave v1.3.2.jpg


    Damit's es schneller läuft, aber die Auflösung wird dadurch kleiner, die Werte für

    Code
    $iDots_X = 32, $iDots_Y = 32

    in der entsprechende Zeile ändern. Je größer desto langsamer.


    Danke an Eukalyptus für GDIPlusEx Funktionen (you rock man) :rock:

  • Nett,
    laüft auch auf meinem Läppi mit xp.

    Schick...


    Gruß
    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hast Du suuuuuper gemacht.
    Aber durchblicken tue ich mein dem Script nun gar nicht. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hast Du suuuuuper gemacht.
    Aber durchblicken tue ich mein dem Script nun gar nicht. ;)

    interessant sind die Zeilen 86 - 143.

    Idee:

    • baue ein 3D Array auf, um die 32x32 Pixels abzuspeichern (an der x/y Position die x, y und die Farbwerte des Bildes speichern)
    • berechne die Farbe des Pixel, die x und y Koordinate
    • zeichne die neu berechneten Pixel mit Rechtecken

    Jedes Pixel läuft auf einer Kreisbahn, wobei die Phase der Sin/Cos Kurve verschoben ist, so dass dieser Welleneffekt entsteht.

    Ich werde noch ein Gitter aufspannen und die Verzerrungen der einzelnen Bildfragmente via Trapezoids darstellen. Mal sehen, wie das aussehen wird...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hast du eine Idee, wie ich die grauen Linien, die im Bild vorkommen, wenn die Quadranten nicht richtig zueinander liegen, weg bekomme?

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (22. Dezember 2015 um 10:48)

  • Meinst du die Linien die entstehen, wenn die Vordergrundbilder nicht genau Kante an Kante gezeichnet werden ?

    Ich glaube (bin mir aber nicht sicher), dass sowas im Regelfall seeehr Primitiv gelöst wird.
    - Man checkt für jeden Pixel, ob er die Hintergrundfarbe hat.
    - Wenn er dann von 3 Pixeln umgeben ist die eine andere Farbe haben kopiert man den Inhalt eines dieser Pixel.
    - Weiter zum nächsten.
    Die Methode ist schnell und bei Animationen achtet eh niemand auf einen einzigen Pixel der dann die gleiche Farbe wie der Nachbar hat. Allerdings wäre das eine nachträgliche Bildbearbeitung, die nur funktioniert wenn die Linien die Hintergrundfarbe haben (oder transparent sind, ist ja egal in welchem Umfeld man sich befindet).

  • Yep, genau das meine ich. Theoretisch sollte das aber nicht vorkommen, weil ein Gitter aufgezogen wird und jeweils die Nachbarpunkte benutzt werden.


    Sowas hier:

    Ist die Vorgänger Version.

    Ich vermute, dass eher in _GDIPlusEx_BitmapWarp() irgendwo Integer benutzt wird und es dadurch zu diesen Darstellungsproblemen kommt.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (22. Dezember 2015 um 10:53)

  • Ich weiß, dass man das in AutoIt nicht machen darf, aber als Beispiel hab ich die Funktion kurz gebastelt. (Müsste natürlich noch optimiert und in ASM portiert werden).

    Edit: Also das wäre mein Lösungsansatz zu diesem Problem. Weil diese "Lücken" irgendwie IMMER Auftauchen, egal was man anstellt (Hatte ich auch schon mehrfach, dagegen gibt es kein Heilmittel^^)

  • Ein Workaround:

    AutoIt
    _GDIPlusEx_BitmapWarp($oBuffer, $aCoords[$iY][$iX][2], _
    						$tWarp.X1, $tWarp.Y1, _
    						$tWarp.X2 + 0.5, $tWarp.Y2, _
    						$tWarp.X3, $tWarp.Y3 + 0.5, _
    						$tWarp.X4 + 0.5, $tWarp.Y4 + 0.5)

    bzw. gleich so, ohne Umweg über die Struct (5fps mehr)