GDI+, Kleiner Farbverlauf

  • Hallo Leute,

    ich beschäftige mich gerade mit GDI+ und versuche einen kleinen blauen Farbverlauf mit PenSetColor und GraphicsDrawLine zu zeichnen. Mann nannte das früher mal eine CopperBar.

    Leider bekomme ich nur einen schwarzen Balken der zwar genau so breit ist wie ich möchte aber eben nur schwarz.

    Ich habe das und viele anderes graphisches Zeug schon in anderen Sprachen geproggt und dachte ich code das mal schnell nach zum lernen eben, aber es klappt nicht und ich suche schon seit Stunden den Fehler!;(

    So sollte es aussehen (Bild_1)::)

    http://picload.org/view/daoodgia/copper_1.png.html

    Aber so sieht es aus (Bild_2):<X

    http://picload.org/view/daoodddl/copper_2.png.html

    Die Sinuswerte aus Bild_1 lasse ich mir zur Kontrolle in eine Textdatei schreiben und in AutoIT nicht auf das Fenster ausgeben (weiß nicht wie).

    Hier mein Code:

    Wäre klasse wenn Ihr mir da helfen könntet. Bin halt noch relativ neu bei AutoIT und ein Bloody Noob bei GDI+!

    Vielen Dank vorab für Eure Mühe.

    Grüße,

    Snake

  • Probiere es mal damit:

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi,

    vielen Dank für Deine schnelle Antwort UEZ.

    Du arbeitest mit einem Brush und ich mit PenSetColor. Das müsste doch auck klappen.

    Ich denke es liegt daran dass ich das SinusArray falsch mit den Werten befülle.

    Die Sinusfunktion von AutoIT wirft bei sin(1) 0.841470984807897 und der Taschenrechner 0,017452 raus. Nur bei sin(0) sind beide gleich????

    Aber was mache ich da falsch????

    Grüße,

    Plissken

  • Danke alpines das sieht schon deutlich besser aus, wenn auch noch nicht perfekt!

    Werd auf jeden Fall weiter dran basteln.


    Grüße,

    Plissken

    Einmal editiert, zuletzt von Snake Plissken (6. März 2018 um 17:53)

    • Offizieller Beitrag

    Du musst das auch auf die möglichen Blauwerte (0...255) umrechnen:

    • Offizieller Beitrag

    muss es bei Deiner Variablen Deklaration nicht heißen RadToDeg, da wir doch Radianten in Grad umrechnen?

    Nein, wir rechnen mit Grad/Deg (For-Schleife: 0...360). Der Sin-Befehl erwartet den Wert aber in Radian/Rad, deswegen ist DegToRad schon richtig.


    Edit: Wenn Du gerade anfängst Dich mit GDI+ zu beschäftigen, dann solltest Du auch gleich lernen, wie man einen Backbuffer verwendet. Das hat nämlich den Vorteil, dass man die Grafik schnell wieder neuzeichnen kann (beim Restore oder WM_PAINT).

    Außerdem sieht man es nicht, wenn Dein Programm die Grafiken, Linien, Punkte etc. zeichnet, sondern es wird erst die fertige Grafik auf das Fenster gezeichnet:

  • Oscar

    VielenDank Oscar, Ihr seid die beste und netteste Community die ich jemals kennengelernt habe!

    Kennst Du ein gutes Buch zum Thema GDI+ oder einige gute Tutorials?

    Muss nicht unbedingt AutoIT sein, C++ C# etc. oder sonstwas geht auch!

    Vielend Dank nochmal und Grüße,

    Plissken

  • Eine klitzekleine Kleinigkeit hab ich zu meckern. ^^

    Code
    $iARGB = "0xFF0000" & Hex($aSinColor[$i], 2)

    Das ist nicht so schön. Man wandelt zuerst einen Ganzzahl-Wert in einen String (genauer: in die Hexadezimaldarstellung) um, dann konkateniert man "0xFF0000" mit diesem String, nur um dann letztendlich wieder einen Cast zu einem Integer beim Aufruf von PenSetColor durchzuführen. Das ist volles Ausnutzen des Variant-Types, kostet aber wirklich einiges an Laufzeit, relativ gesehen. Dabei tut es auch eine simple Addition:

    Code
    $iARGB = 0xff000000 + $aSinColor[$i]

    Das ist jetzt ungetestet, sollte aber auch funktionieren. Und ist nicht so Durch-Die-Brust-Ins-Auge-Mäßig. :D

  • Hi Chesstiger,

    die Tutorials in Deiner Signatur klingen sehr gut. Ich weiß dass nach dem Forenumzug alle Links ins Nirvana zeigen und man mit einem HTML Sniffer die Inhalte dieser Links doch noch finden kann. Da ich aber von HTML Sniffern keine Ahnung habe wollte ich Dich bitten ob Du nicht funktionierende Links zu diesen Tutorials (Sauber Programmieren, GDI+ Rundumschlag) posten könntest!?

    Vielen Dank und viele Grüße,

    Plissken

  • Ja, die Links aktualisiere ich dann auch mal... *hust*

    Beide Tutorials bedarfen sowieso mal einer Anpassung und Überarbeitung, fürchte ich. Allein schon die ganzen zerhauenen Code-Schnipsel. Aber als Orientierung sollte es gehen.

    Eine Anmerkung noch zum Thema: Statt Pi als Literal anzugeben, kann man es auch einfach berechnen, z.B. mit 4 * ATan(1).

  • chesstiger

    Optimierungen sind nie verkehrt aber Deine Tutorials sind sehr, sehr gut.

    Ich mache grad Dein GDI+ Rundschlag Tutorial und finde es einfach seeehhhr gut da es jedes wichtige Thema behandelt!

    Ein Tipp bzw. Wunsch, wenn Du Regions z.B. Fenster mit Löchern und Buttons in ungewöhnlichen Formen einbauen könntest wäre das echt Klasse und Dein GDI+ Tutorial einzigartig und unschlagbar!

    Beispiellink:

    http://www.codeproject.com/Articles/254/The-RGN-Generator


    Vielen Dank vorab und viele Grüße,

    Plissken