1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Andy

Beiträge von Andy

  • Problem bei Array bzw. Routen

    • Andy
    • 13. Februar 2013 um 13:49

    Hi,
    so wie ich das sehe, beschreibst du das TSP (Travelling Salesmen Problem). Bis zu einer Handvoll Punkte ist die optimale d.h. kürzeste Strecke per Bruteforce zu lösen, alles andere würde den Aufwand für eine "Hausarbeit" bei weitem sprengen.

    Zitat von Wikipedia

    ....Bei der einfachsten Variante, dem symmetrischen TSP mit Städten, gibt es verschiedene Rundreisen, das sind bei 15 Städten über 43 Milliarden und bei 18 Städten bereits über 177 Billionen. Wie schnell die Rechenzeit mit wachsender Anzahl von Städten wächst, zeigt das folgende Beispiel: hat man einen Rechner, der die Lösung für 30 Städte in einer Stunde berechnet, dann braucht dieser für zwei zusätzliche Städte annähernd die tausendfache Zeit; das sind mehr als 40 Tage....

    Der Bruteforce Lösungsansatz:
    Berechne die Strecken zwischen allen Punkten.
    Addiere die einzelnen Strecken zum Gesamtweg zwischen Anfang und Ende, wenn jeder Punkt nur einmal angefahren wird.
    Die kürzeste Strecke ist die Lösung....

    Beispiel auf die schnelle...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $max = 7 ;maximale Anzahl Punkte
    $max_x = 500
    $max_y = 500

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hgui = GUICreate("TSP-Brute", $max_x, $max_y)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hgui)
    $hPen = _GDIPlus_PenCreate()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $aArray[$max - 1] ;permutationen
    For $i = 0 To $max - 2
    $aArray[$i] = $i + 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Local $aNewArray = _ArrayPermute($aArray, ",") ;Using Default Parameters
    ;_ArrayDisplay($aNewArray, "Array Permuted")
    For $i = 1 To $aNewArray[0] ;anfangs- und endpunkt anfügen
    $aNewArray[$i] = "0," & $aNewArray[$i] & ",0"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aNewArray)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $x[$max + 1], $y[$max + 1] ;koordinaten

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $max ;zufällige koordinaten
    $x[$i] = Random(1, $max_x, 1)
    $y[$i] = Random(1, $max_y, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $kuerzeste_strecke = 1e22

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aNewArray[0] ;alle permutationen durchgehen
    $s = StringSplit($aNewArray[$i], ",") ;permutationen aufteilen
    ;_arraydisplay($s)
    $gesamtlaenge = 0
    For $c = 2 To $s[0] ;einzelteile
    $Strecke_zw_zwei_Punkten = Sqrt(($x[$s[$c - 1]] - $x[$s[$c]]) ^ 2 + ($y[$s[$c - 1]] - $y[$s[$c]]) ^ 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$s[$c - 1]], $y[$s[$c - 1]], $x[$s[$c]], $y[$s[$c]], $hPen)
    ;~ sleep(100)
    $gesamtlaenge = $gesamtlaenge + $Strecke_zw_zwei_Punkten
    Next
    _GDIPlus_GraphicsClear($hGraphic, 0xFFF0F0F0)
    If $kuerzeste_strecke > $gesamtlaenge Then
    $kuerzeste_strecke = $gesamtlaenge
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $kuerzeste_strecke = ' & $kuerzeste_strecke & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $kuerzeste_strecke_array = $i
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, $aNewArray[$kuerzeste_strecke_array], $kuerzeste_strecke)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;kürzeste Strecke zeichnen
    $hPen = _GDIPlus_PenCreate(0xFFFF00FF, 2)
    $s = StringSplit($aNewArray[$kuerzeste_strecke_array], ",") ;permutationen aufteilen
    For $c = 2 To $s[0] ;einzelteile
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $c = ' & $c & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $Strecke_zw_zwei_Punkten = Sqrt(($x[$s[$c - 1]] - $x[$s[$c]]) ^ 2 + ($y[$s[$c - 1]] - $y[$s[$c]]) ^ 2)
    _GDIPlus_GraphicsDrawLine($hGraphic, $x[$s[$c - 1]], $y[$s[$c - 1]], $x[$s[$c]], $y[$s[$c]], $hPen)
    ; $gesamtlaenge = $gesamtlaenge + $Strecke_zw_zwei_Punkten
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While GUIGetMsg() <> -3
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Halbkreis mit GDI+

    • Andy
    • 11. Februar 2013 um 20:25

    _GDIPlus_GraphicsDrawArc

  • Webseite aktualisieren / GUI streamen / GET?

    • Andy
    • 11. Februar 2013 um 19:37

    schau dir mal Deskstream an...

  • Über die String-Dekompression

    • Andy
    • 11. Februar 2013 um 14:23

    chr(0) sollte ja nicht vorkommen, es geht ja um die Kompression von Strings, die aus 0-F bestehen.

    Hatte im vorigen Post ein falsches Script gepostet, ist jetzt korrigiert.

  • Über die String-Dekompression

    • Andy
    • 11. Februar 2013 um 11:41

    letzte Variante, AutoIt.exe auf 83% komprimiert ausschliesslich in ASCII-codes von 42="0" bis 122="z"

    Spoiler anzeigen
    [autoit]

    $stest = StringTrimLeft(StringToBinary(FileRead(@AutoItExe)), 2) ;0x entfernen

    [/autoit] [autoit][/autoit] [autoit]

    $len = StringLen($stest)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $len = ' & $len & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $t = TimerInit()
    $a = compbin($stest)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $m = TimerDiff($t)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $alen = StringLen($a)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $alen = ' & $alen & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $rate = Int($len / $m)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $rate = ' & $rate & " KB/s" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $t = TimerInit()
    $b = decompbin($a)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $b = ' & $b & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    $m = TimerDiff($t)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : len2 = ' & StringLen($b) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $rate = Int($alen / $m)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $rate = ' & $rate & " KB/s" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func compbin($string)
    $len=stringlen($string)
    For $p = 0 To 15
    $token = Hex($p, 1) ;0-F
    $l = ""
    For $m = 1 To 26
    $l &= $token
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 26 To 3 Step -1 ;anzahl vorkommen
    $l = StringLeft($l, $i) ;
    $string = StringReplace($string, $l, $token & Chr(95 + $i), 0, 1)
    Next
    $string = StringReplace($string, $token & $token,Chr(Dec($token) + 71), 0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Perc = Round(StringLen($string) / $len * 100)
    ConsoleWrite("!> Compression: " & $Perc & "%" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    Return $string
    EndFunc ;==>compbin

    [/autoit] [autoit][/autoit] [autoit]

    Func decompbin($string)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 71 To 86
    $a = Hex($i - 71, 1)
    $string = StringReplace($string, Chr($i), $a & $a, 0, 1)
    Next
    For $i = 97 To 122 ;x-fache token
    $a = Chr($i)
    $pos = 1
    Do
    $pos = StringInStr($string, $a, 1, 1, $pos + 1)
    If $pos <> 0 Then
    $char = StringMid($string, $pos - 1, 1)
    $ersetzen = ""
    For $q = 1 To $i - 95
    $ersetzen &= $char
    Next
    $string = StringReplace($string, $char & $a, $ersetzen, 0, 1)
    EndIf
    Until $pos = 0
    Next
    Return $string

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>decompbin

    [/autoit]

    Mars, sollte nun auch mit deiner Variante vesser funktionieren
    Btw, die Kompression von AutoIt.EXE mit deiner Variante habe ich nach 1h Laufzeit abgebrochen....

    Zitat

    Auf das Packen kann man ewig warten, das stört keinen

    ;)

    //EDIT falsches Script gepostet, entpackt jetzt mit >400Kb/s

  • Über die String-Dekompression

    • Andy
    • 11. Februar 2013 um 09:00

    Hi,
    die Frage bei Kompressionen im Allgemeinen lautet doch, schnell oder hoch?
    Das eine schließt das andere aus....
    Ich benutze zum Testen meiner Kompressionsrate die AutoIt.exe, die mit den aktuellen Scripten auf 83% eingestampft wird.
    Folgende Tabelle gibt die Anzahl der vorkommenden identischen aufeinanderfolgenden Bytes wieder.

    Spoiler anzeigen
    Code
    1     746798
    2     69974
    3     3347
    4     10027
    5     1139
    6     6058
    7     810
    8     958
    9     112
    10     57
    11     2
    12     51
    13     4
    14     26
    15     7
    16     27
    18     18
    20     10
    22     19
    23     2
    24     26
    25     2
    26     18
    27     1
    28     23
    30     27
    32     1
    47     1
    51     1
    52     1
    55     14
    Alles anzeigen

    Mit der "billigen" und schnellen Lauflängenkodierung sieht man deutlich, dass man niemals unter 80% kommen kann!

    Zitat

    Dabei habe ich gemerkt, dass Andys methode seltsame Zeichen einstreut

    Das ist im Prinzip schon totaler Mumpitz meinerseits^^. Bytewerte von 0-FF in 2 Byte zu "entpacken", damit man eine "Hex-Darstellung" bekommt, und dann nachher diese Hex-Darstellung zu "komprimieren" auf 80% (50% wenn es Bytes wären...omfg) ist ehrlich gesagt hochgradig geistiger D***schi***. Das macht nur dann Sinn, wenn man die 7 Bit-Codes verwenden MUSS, und dann auch auch entsprechend das Ergebnis einschränkt...

  • Über die String-Dekompression

    • Andy
    • 10. Februar 2013 um 02:22

    Nächtliches Update und Bugfixes im Post 4

    - Lauflängenkodierung mehrerer Ziffern bzw Buchstaben
    - wenn genau 2 gleiche Ziffern von 0-7 hintereinander vorliegen, werden diese in ein Byte gepackt:
    Bit 7=Kennung, dass doppelte Ziffer
    Bit 6-4 = Ziffer
    Bit 3 = nicht benutzt
    Bit 2-0 = Ziffer
    so wird aus "33" das byte 10110011
    sehr cool dabei:
    Lässt man das Bit 7 weg und schaut sich die restlichen Bits an, dann stellt man fest, dass der "Wert" aller bits immer 17fach höher ist, als eine der "Ziffern"
    Ziffern "1"=>Bytewert 17
    Ziffern "2"=>Bytewert 34
    Ziffern "3"=>Bytewert 51 usw^^
    Man kann beim komprimieren aus der Ziffer sehr schnell den Bytewert ausrechnen und beim dekomrimieren natürlich aus dem Bytewert sehr schnell die Ziffer ausrechnen 8o
    -

  • AutoIt Compiler (Project Perseus)

    • Andy
    • 9. Februar 2013 um 23:39
    Zitat

    Davon passen Dutzende Kopien auf eine Diskette

    Diskette, wasn das? :rofl:

    Zitat

    Wenn ich ein OP-Problem hab nerv ich dich sowieso

    das will ich doch sehr hoffen :thumbup:

    ca. 60 KB, wäre das nicht ne Idee, LASM statt FASM mit AssembleIt zu verheiraten? Dann hätte sich das ganze gerödel mit den Memory- und schlagmichtot-UDF´s erledigt, und man hätte EIN include-file?!
    Oder man könnte den "normalen" AutoItcode auch behalten und zusammen mit "echten" #inline Assemblercode durch deinen Perseus jagen. Im AutoItscript würde Perseus dann aus dem ASM-code einen einfachen CALL machen...
    Das wäre jedenfalls ein einfach umzusetzender Zwischenschritt!

  • Zeichnen like a Boss

    • Andy
    • 9. Februar 2013 um 23:03
    Zitat

    sehr praktisch, da ich sehr viele JS Source Codes habe, die total unübersichtlich sind


    uhhhh, jetzt können wir uns auf etwas gefasst machen.... :thumbup:
    Btw, du hättest auch gleich den Link zu der 1024Byte-JS-Seite posten können

  • AutoIt Compiler (Project Perseus)

    • Andy
    • 9. Februar 2013 um 22:50

    Sehr feine Sache das!
    Bin mal gespannt, wo das hinführt... ;)

    Da sich "einfache" AutoIt-Scripte recht einfach 1:1 in Assembler abbilden lassen, sollte das funktionieren.
    Ich hatte schon ein Umwandlungs-Script geschrieben, welches komplette Scripte mit Arrays in Scripte ausschliesslich mit Structs transferiert, incl. Ein/Ausgabe. Structs kann man sehr schön mit Assembler bearbeiten, wesentlich besser als Arrays. So konnte ich ein "SortArray" mit Floats/Integern in Assembler schreiben, welches 1000x schneller war, als das AutoIt-_ArraySort().
    Was mich damals gehindert hat weiterzumachen, war das Problem der Typen bzw. der nicht vorhandenen Typen^^.


    Wie auch schon in anderen Threads, die in diese Richtung gehen, gebe ich wieder mal meinen Senf dazu.
    Für 99% aller Fälle ist ein AutoIt-Script schnell genug, braucht man ausnahmsweise mehr Geschwindigkeit, dann ist Profilen, den "Inner Loop" finden und diesen in einer PowerBasic/C++/Assembler-DLL abbilden und aufrufen imho die schnellste und einfachste Lösung.
    Bei Preisen von <10€ für das Gigabyte RAM und <50€ für ne Terabyte Platte stellt sich auch nicht mehr die Frage nach "kleinen" Dateien (*hust* den Sudoku-Löser in 62 Byte find ich trotzdem oberaffengeil :D )

    minx, hau rein! :thumbup:

  • Über die String-Dekompression

    • Andy
    • 9. Februar 2013 um 22:16

    autoBert,
    die Funktionen zur Kompression habe ich schon in DeskStream verwendet, da habe ich nicht nur Lauflängenkomprimierung, sondern nebenbei auch noch bissl Pixelkomprimierung in Assembler reingepfriemelt....Erklärung

    Die Geschichte mit dem "überflüssigen" Bit habe ich ja auch im vorliegenden Script verwendet....und gerade gesehen, dass da auch noch einiges zu kürzen ist^^

  • Über die String-Dekompression

    • Andy
    • 9. Februar 2013 um 21:00

    oder sehr simpel so^^

    Spoiler anzeigen
    [autoit]

    $stest = StringTrimLeft(StringToBinary(FileRead(@AutoItExe)), 2) ;0x entfernen
    ;~ $sTest = "67B666666B76000000000000000000056B66666666B650000000000000000056B666666666676500000000000000006676666666666766000000000000000566666666666666665000000000000006666666666666666660000000000000566666666666666666650000000000005666666666666667666500000000000056677676767676767665000000000000566B777777777777B665000000000000566B7B777777777BB665000000000000066BBB7B7B7BB7BBD650000000000000056BDBBBBBBBBBBD76500000000000000056BDDDBDBDBDDD660000000000000000366BEDDDDDDEB655000000000000000005567BDEEDB76550000000000000000000055666666550000000000000000000000005555550000000000000FFFFFFFFFFFE7FFFFFF81FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFE007FFFFE007FFFFE007FFFFC003FFFFC003FFFFC003FFFFC003FFFF8001FFFF0000FFFF0000FFFE00007FFE00007FFC00003FFC00003FFC00003FFC00003FFC00003FFE00007FFE00007FFF0000FFFF0000FFFF8001FFFFE007FFFFF81FFF00000000F26A0451000000000000010000000000800300009053040030010000B0040000000000002800000020000000400000000100010000000000000100000000000000000000000000000000000000000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1FFFFFC3C7FFFC3FC1FF83FFC07FBFFFC1FFBFFFC7FFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFC1FFFBFC3DFFFBC3C1FFF83C3FFFFBC3FFFFF83FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1FFFFFC007FFFC0001FF8000007F800001FF800007FF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF8003FFFF803FFFFF83FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F26A0451000000000000010000000000D8040000E8540400E8020000B0040000000000002800000020000000400000000100040000000000800200000000000000000000000000000000000000000000"
    ;~ ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sTest = ' & $sTest & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ;~ $sTest = '67B[6:6]B76[0:19]56B[6:8]B65[0:17]56B[6:10]765[0:16]667[6:10]766[0:15]5[6:16]5[0:14][6:18][0:13]5[6:18]5[0:12]5[6:14]76665[0:12]56677676767676767665[0:12]566B[7:12]B665[0:12]566B7B[7:9]BB665[0:13]66BBB7B7B7BB7BBD65[0:14]56BD[B:10]D765[0:15]56BDDDBDBDBDDD66[0:16]366BE[D:6]EB655[0:17]5567BDEEDB7655[0:20]55[6:6]55[0:24][5:6][0:13][F:11]E7[F:6]81[F:6]00[F:6]00[F:6]00[F:6]00[F:6]00[F:5]E007FFFFE007FFFFE007FFFFC003FFFFC003FFFFC003FFFFC003FFFF8001FFFF0000FFFF0000FFFE00007FFE00007FFC00003FFC00003FFC00003FFC00003FFC00003FFE00007FFE00007FFF0000FFFF0000FFFF8001FFFFE007[F:5]81FFF[0:8]F26A0451[0:13]1[0:10]800300009053040030010000B004[0:12]28[0:6]2[0:7]4[0:8]10001[0:13]1[0:44][F:6]00[F:44]C1[F:5]C3C7FFFC3FC1FF83FFC07FBFFFC1FFBFFFC7FFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFFDFFFBFFC1FFFBFC3DFFFBC3C1FFF83C3FFFFBC3[F:5]83[F:6]B[F:98]C1[F:5]C007FFFC0001FF8[0:5]7F800001FF800007FF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF80001FFF8003FFFF803[F:5]83[F:6]B[F:54][0:8]F26A0451[0:13]1[0:10]D8040000E8540400E8020000B004[0:12]28[0:6]2[0:7]4[0:8]10004[0:10]8002[0:44]'
    $stest = StringLeft($stest, 500000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $len = StringLen($stest)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $len = ' & $len & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    $t = TimerInit()
    $a = compbin($stest)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $m = TimerDiff($t)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $alen = StringLen($a)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $alen = ' & $alen & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $rate = Int($len / $m)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $rate = ' & $rate & " KB/s" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $t = TimerInit()
    $b = decompbin($a)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $b = ' & $b & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    $m = TimerDiff($t)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : len2 = ' & StringLen($b) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $rate = Int($alen / $m)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $rate = ' & $rate & " KB/s" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func compbin($string)
    $len = StringLen($string)
    $ret = ""
    $p = 0
    For $i = 1 To $len ;kompletten string durchlaufen
    $aktuell = StringMid($string, $i, 1) ;aktuelles token
    $anz = 1 ;anzahl gleicher token
    For $a = $i + 1 To $i + 54 ;kommt es mehrfach vor?
    If StringMid($string, $a, 1) = $aktuell And $a <= $len Then ;kommt mehrfach vor
    $anz += 1
    Else
    $i = $a - 1 ;nicht mehrfach
    ExitLoop ;nächstes token
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $anz > 2 Then ;mehr als 2 gleiche token gefunden
    $ret &= $aktuell & Chr(70 + $anz) ;anzahl hinter token hängen
    $i = $a - 1
    ElseIf $anz = 2 Then
    If Asc($aktuell) < 56 Then ;bit 0-3 und 5-7 nehmen eine doppelte zahl auf
    $ret &= Chr((Asc($aktuell) - 48) * 17 + 127)
    Else
    $ret &= $aktuell & $aktuell
    EndIf
    Else
    $ret &= $aktuell ;nur einmal vorkommenden buchstaben anhängen
    EndIf
    Next
    $Perc = Round(StringLen($ret) / $len * 100)
    ConsoleWrite("!> Compression: " & $Perc & "%" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    Return $ret
    EndFunc ;==>compbin

    [/autoit] [autoit][/autoit] [autoit]

    Func decompbin($string)
    $ret = ""
    $len = StringLen($string)
    For $i = 1 To $len
    $decomp = StringMid($string, $i, 1);aktueller buchstabe ;
    $token = Asc($decomp) ;aktuelles token
    If $token >= 127 Then ;doppelte 0-7?
    $decomp = Chr((($token - 127) / 17) + 48);magic numbers FTW^^
    $decomp &= $decomp
    ElseIf $token > 70 Then ;komprimiertes Zeichen?
    $token -= 70 ;länge
    $akt = StringMid($string, $i - 1, 1) ;aktueller zu vervielfältigende buchstabe
    $decomp = ""
    For $a = 1 To $token - 1
    $decomp &= $akt
    Next
    Else
    $decomp = StringMid($string, $i, 1) ;einfache Ziffer/Buchstabe
    EndIf
    $ret &= $decomp

    [/autoit] [autoit][/autoit] [autoit]

    Next
    Return $ret

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>decompbin

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    eine äusserst billige Lauflängenkodierung, die bis zu 127 gleiche Buchstaben durch den Buchstaben und einen weiteren Token ersetzt, der die Anzahl bestimmt.
    Wem die Codes >127 nicht passen, der kann beim komprimieren die ascii-codes von 0-F um 12 vermindern und dann die Anzahl von 64 bis 128 festlegen.

    Btw, minx, dein Ursprungs-string ist auf 44% eingestampft 8o

    //EDIT Bug entfernt, Text geändert

    //EDIT 2, verbesserte Komprimierung, minimal langsamer, s. Post 7

  • Zeichnen like a Boss

    • Andy
    • 8. Februar 2013 um 21:30

    Hi,

    Zitat

    Wow das sieht echt toll aus. Wäre wirklich interessant mit AutoIt umzusetzen. Das stelle ich mir allerdings nicht ganz einfach vor.

    sieht mir anhand der Stützstellen nach B-Spline aus.
    Die Mausposition wird abgefragt, und an dieser Position werden einige Punkte erstellt, die sich auf zufälligen Bahnen vom Mauspunkt wegbewegen und irgendwann "sterben".
    Jetzt muss man nur noch von den "überlebenden" Punkten zufällig 4 auswählen und anhand dieser den B-spline erstellen. Einen oder zwei der "Überlebenden" nimmt man dann wieder als Startpunkt, welcher wiederum neue Punkte generiert, die sich vom Startpunkt wegbewegen....uswusf

    Kommt nicht ganz hin, aber so ähnlich....die GDI-Fuzzis machen da bestimmt noch ne Show draus^^

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;linke maustaste gedrückt halten zeichnet sich bewegende splines durch die vergangenen Mauspositionen
    ;rechte maustaste resettet den startpunkt

    [/autoit] [autoit][/autoit] [autoit]

    $anzahl = 7 ;anzahl der stützpunkte des splines

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $hGUI, $hWnd, $hGraphic, $aPoints[$anzahl + 1][2]
    Dim $x[$anzahl + 1], $y[$anzahl + 1]
    $aPoints[0][0] = $anzahl

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Erstellt eine GUI
    $hGUI = GUICreate("Paint Me :o)", 800, 800)
    $hWnd = WinGetHandle($hGUI)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Zeichnet eine Spline
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Opt("MouseCoordMode", 0)

    [/autoit] [autoit][/autoit] [autoit]

    MouseMove(300, 300, 0)
    ;ursprung
    For $i = 1 To $anzahl ;mauskoordinaten in alle punkte des splines
    $x[$i] = MouseGetPos(0)
    $y[$i] = MouseGetPos(1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $xalt = MouseGetPos(0)
    $yalt = MouseGetPos(1)

    [/autoit] [autoit][/autoit] [autoit]

    $col = 0xFF00FF00
    $down = 0
    $reset = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $a = GUIGetMsg()
    If $a = -3 Then ExitLoop
    If $a = $GUI_EVENT_PRIMARYDOWN Then $down = 1;linke maustaste runter
    If $a = $GUI_EVENT_PRIMARYup Then $down = 0;linke maustaste hoch
    If $a = $GUI_EVENT_SECONDARYDOWN Then $reset = 1;rechte maustaste zum resetten

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $down Then ;linke maustaste gedrückt
    Sleep(10) ;verlängern !

    [/autoit] [autoit][/autoit] [autoit]

    If $reset = 1 Then ;resettet den startpunkt
    $reset = 0
    For $i = 1 To $anzahl
    $x[$i] = MouseGetPos(0)
    $y[$i] = MouseGetPos(1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $xalt = MouseGetPos(0)
    $yalt = MouseGetPos(1)
    $col = 0xFF000000 + Random(0xFFFF, 0xFFFFFF, 1) ;neue farbe
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $xneu = MouseGetPos(0);neue mauskkordinaten
    $yneu = MouseGetPos(1)

    [/autoit] [autoit][/autoit] [autoit]

    If $xalt <> $xneu Or $yalt <> $yneu Then ;wenn mausposition geändert, neue mausposition in koordinaten einbauen
    $xalt = $xneu
    $yalt = $yneu
    For $i = 1 To $anzahl - 2
    $x[$i] = $x[$i + 1]
    $y[$i] = $y[$i + 1]
    $aPoints[$i][0] = $x[$i]
    $aPoints[$i][1] = $y[$i]
    Next
    $x[$anzahl - 1] = MouseGetPos(0) ;vorletzter punkt = mauskoordinaten
    $y[$anzahl - 1] = MouseGetPos(1)
    $x[$anzahl] = $x[1];letzter Punkt = erster Punkt = spline geschlossen
    $y[$anzahl] = $y[1]

    [/autoit] [autoit][/autoit] [autoit]

    $col = 0xFF000000 + Random(0xFFFF, 0xFFFFFF, 1) ;neue farbe
    $hpen = _GDIPlus_PenCreate($col)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $anzahl - 1;jede runde die koordinaten zufällig bewegen
    $v = Random(-10, 10, 1);2 richtungen vertikal
    $h = Random(-10, 10, 1);2 richtungen horizontal
    $x[$i] += $v
    $y[$i] += $h
    $aPoints[$i][0] = $x[$i]
    $aPoints[$i][1] = $y[$i]
    Next
    $aPoints[$anzahl][0] = $x[1] ;letzter punkt = erster punkt = spline geschlossen
    $aPoints[$anzahl][1] = $y[1]

    [/autoit] [autoit][/autoit] [autoit]

    $col += 100 ;farbe verändern
    $hpen = _GDIPlus_PenCreate($col)
    _GDIPlus_GraphicsDrawCurve($hGraphic, $aPoints, $hpen)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Ressourcen freigeben
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit]
  • VSync per WinAPI ?

    • Andy
    • 7. Februar 2013 um 21:47

    Hi,
    in XP kommt man über Eigenschaften Anzeige, Einstellungen, Erweitert, Reiter Monitor zur Bildschirmaktualisierungsrate.

    Zitat

    Aber theoretisch kann man seinen Monitor doch auch auf 75Hz stellen, oder? Dann ist das doch wieder ganz anders... Macht das Sinn, seinen Monitor auf 75 Hz zu stellen?


    Bei einem digital angesteuerten Flachbildschirm, macht das imho keinen Sinn. Die Bildqualität/Flimmern ist bei allen Frequenzen identisch (wieso sonst sollte man ein Display digital ansteuern^^ ) allerdings steigt bei zunehmender Monitorfrequenz natürlich auch die Transferlast auf den Speicher der Grafikkarte.
    Kurzes Beispiel:
    Monitor Auflösung 1920x1080, 32BitPerPixel(=4BytepP) und 60 Hz => 1920*1080*4 Byte * 60 1/s = 498 MByte/s
    Monitor Auflösung 1920x1080, 32BitPerPixel(=4BytepP) und 85 Hz => 1920*1080*4 Byte * 85 1/s = 705 MByte/s

    Röhrenmonitore sollte man immer mit der vom Monitor und Grafikkarte höchsten verfügbaren Frequenz ansteuern, um Flimmern zu minimieren.

    Bei analog angesteuerten digitalen Monitoren sollte man auch die niedrigste Monitorfrequenz einstellen, das kann die Bilddarstellung teilweise deutlich verbessern, da die "analogen" Störungen durch Kabel, Steckverbinder usw. die verfügbare Bandbreite für das Signal einschränken können. Weniger Bildwiederholfrequenz => weniger benötigte Bandbreite => besseres Signal => besseres Bild 8)

  • DLLCall - Ausgabe eines structs, welches als Element ein struct beinhaltet, klappt! Elegante Lösung zum Auslesen der Daten gesucht

    • Andy
    • 6. Februar 2013 um 20:42

    Hi!

    Zitat

    Ja du hast recht die sind auch net richtig, aber ich finde das Thema schon recht schwierig und wollte es nicht noch komplizierter machen,

    Dein Problem ist, dass du keine GENAUE Beschreibung der DLL hast. Bis zum Datum stimmen die Ergebnisse, ab dann nicht mehr. Die DLL schreibt natürlich einfach nur "ihre" Daten fortlaufend in den Speicher (an der Position der Struct) . Wenn du diesen Speicherbereich natürlich nur teilweise ausliest, dann geht das nur so lange gut, bis du an (wie in diesem Fall das DATE) einen Punkt gelangst, an dem du nur RÄTST, was die nächsten Bytes in der Struct enthalten.
    Stimmt wenigstens die Bytelänge deiner Abfrage, bekommst du zwar ein "falsches" Ergebnis, bpw. die DLL schreibt FLOAT und du liest INT (beides 4 bytes), aber die folgenden Daten sind wieder "richtig".
    Ich sehe gerade deine

    [autoit]

    Global Const $tagDismDriverPackage = "PTR PublishedName;PTR OriginalFileName;BOOL InBox;PTR CatalogFile;PTR ClassName;PTR ClassGuid;PTR ClassDescription;" & _
    "BOOL BootCritical;INT DriverSignature;PTR ProviderName;PTR Date;UINT MajorVersion;UINT MinorVersion;UINT Build;UINT Revision"

    [/autoit]


    PTR Date stimmt ja mal nicht mit SYSTEMTIME Date; überein!
    trag doch statt dessen die struct $tagSYSTEMTIME dafür ein.

    [autoit]

    Global Const $tagDismDriverPackage = "PTR PublishedName;PTR OriginalFileName;BOOL InBox;PTR CatalogFile;PTR ClassName;PTR ClassGuid;PTR ClassDescription;" & _
    "BOOL BootCritical;INT DriverSignature;PTR ProviderName;"&$tagSYSTEMTIME&";UINT MajorVersion;UINT MinorVersion;UINT Build;UINT Revision"

    [/autoit]

    so würde ich es versuchen

    //EDIT

    Zitat

    AutoIT stürzt auch bei jedem 2ten mal ab.

    kein Wunder, du reservierst mit deiner Struct nur XX Bytes, aber die DLL schreibt YY Bytes "über" das Ende der Struct. Werden diese Bytes anderweitig belegt bzw benutzt, dann kracht es natürlich.

  • DLLCall - Ausgabe eines structs, welches als Element ein struct beinhaltet, klappt! Elegante Lösung zum Auslesen der Daten gesucht

    • Andy
    • 6. Februar 2013 um 19:37
    Zitat

    Soweit stimmt alles,

    sicher?
    UINT MajorVersion;
    UINT MinorVersion;
    UINT Build;
    UINT Revision
    haben, so weit ich das sehe (Screenshot 1), nichts mit den Angaben auf deinem Screenshot zur Treiberpaketinformation zu tun.

    Bist du definitiv sicher, dass die Struct SYSTEMTIME aus der DismGetDriverInfo () identisch ist mit der Struct aus _Date_Time_GetSystemTime() ?

  • CityMark 0.1 - OpenGL 3D Benchmark

    • Andy
    • 4. Februar 2013 um 22:50

    Hi,

    - CPU: AMD Athlon(tm) II X2 250 Processor (2 x 3013MHz)
    - CPU-Cooldown [====================]
    + Test 1: 156238 points.
    + Test 2: 58620 points.
    + Test 3: 25770 points.
    + Test 4: 9400 points.
    + Test 5: 753372 points.

    ohne Probleme auf XP32

    Allerdings habe ich, wie schon bei deinen anderen GL-Scripten, auf WIN7-64 Probleme in der Darstellung.
    Das GL_Fenster wird erstellt und die Grafik ist "sichtbar", allerdings ohne Farben und nur jeder 4. Pixel (grautöne). Gleichzeitig durchzieht ein "Sägezahn"-Muster das Bild.
    Definitiv stimmt da etwas nicht mit dem Pixelformat. Habe schon alle möglichen Einstellungen in deiner UDF geändert, allerdings finde ich den Fehler nicht.
    Bei anderen OpenGL_Programmen und auch AutoIt-Scripten mit GL treten diese Darstellungsfehler nicht auf....
    Daher vermute ich den Fehler in einer der Extensions, bzw. der AU3- Umsetzung in der UDF.
    Treiber/SDK´s usw habe ich schon alle durch^^.
    Seltsamerweise kann ich das Pixelformat nicht "zu Fuß" beeinflussen! (zusammen mit deiner UDF).
    Ich werde mich mal mit wglChoosePixelFormatARB beschäftigen, ggf. bringt das etwas.
    Die "alte" Variante habe ich mal nach AutoIt portiert, funktioniert so in div. C++-Programmen auf Win7-64 einwandfrei, aber in Kombination mit deiner UDF eben nicht...

    Spoiler anzeigen
    [autoit]

    Func _EnableOpenGL(ByRef $hDeviceContext, ByRef $hOPENGL32RenderingContext)

    [/autoit] [autoit][/autoit] [autoit]

    Local $tPIXELFORMATDESCRIPTOR = DllStructCreate("ushort Size;" & _
    "ushort Version;" & _
    "dword Flags;" & _
    "ubyte PixelType;" & _
    "ubyte ColorBits;" & _
    "ubyte RedBits;" & _
    "ubyte RedShift;" & _
    "ubyte GreenBits;" & _
    "ubyte GreenShift;" & _
    "ubyte BlueBits;" & _
    "ubyte BlueShift;" & _
    "ubyte AlphaBits;" & _
    "ubyte AlphaShift;" & _
    "ubyte AccumBits;" & _
    "ubyte AccumRedBits;" & _
    "ubyte AccumGreenBits;" & _
    "ubyte AccumBlueBits;" & _
    "ubyte AccumAlphaBits;" & _
    "ubyte DepthBits;" & _
    "ubyte StencilBits;" & _
    "ubyte AuxBuffers;" & _
    "ubyte LayerType;" & _
    "ubyte Reserved;" & _
    "dword LayerMask;" & _
    "dword VisibleMask;" & _
    "dword DamageMask")

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($tPIXELFORMATDESCRIPTOR, "Size", DllStructGetSize($tPIXELFORMATDESCRIPTOR))
    DllStructSetData($tPIXELFORMATDESCRIPTOR, "Version", $GL_VERSION_1_1)
    DllStructSetData($tPIXELFORMATDESCRIPTOR, "Flags", BitOR($PFD_DRAW_TO_WINDOW, $PFD_SUPPORT_OPENGL, $PFD_DOUBLEBUFFER))
    DllStructSetData($tPIXELFORMATDESCRIPTOR, "PixelType", $PFD_TYPE_RGBA)
    DllStructSetData($tPIXELFORMATDESCRIPTOR, "ColorBits", 24)
    DllStructSetData($tPIXELFORMATDESCRIPTOR, "DepthBits", 32)
    DllStructSetData($tPIXELFORMATDESCRIPTOR, "LayerType", $PFD_MAIN_PLANE)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $a_iCall = DllCall($hGDI32, "int", "ChoosePixelFormat", "hwnd", $hDeviceContext, "ptr", DllStructGetPtr($tPIXELFORMATDESCRIPTOR))
    If @error Or Not $a_iCall[0] Then
    Return SetError(2, 0, 0) ; could not match an appropriate pixel format
    EndIf
    Local $iFormat = $a_iCall[0]

    [/autoit] [autoit][/autoit] [autoit]

    $a_iCall = DllCall($hGDI32, "int", "SetPixelFormat", "hwnd", $hDeviceContext, "int", $iFormat, "ptr", DllStructGetPtr($tPIXELFORMATDESCRIPTOR))
    If @error Or Not $a_iCall[0] Then
    Return SetError(3, 0, 0) ; could not set the pixel format of the specified device context to the specified format
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $a_hCall = DllCall($hOPENGL32, "hwnd", "wglCreateContext", "hwnd", $hDeviceContext)
    If @error Or Not $a_hCall[0] Then
    Return SetError(4, 0, 0) ; could not create a rendering context
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $hOPENGL32RenderingContext = $a_hCall[0]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hOPENGL32RenderingContext = ' & $hOPENGL32RenderingContext & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    $a_iCall = DllCall($hOPENGL32, "int", "wglMakeCurrent", "hwnd", $hDeviceContext, "hwnd", $hOPENGL32RenderingContext)
    If @error Or Not $a_iCall[0] Then
    Return SetError(5, 0, 0) ; failed to make the specified rendering context the calling thread's current rendering context
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return SetError(0, 0, 1) ; all OK!

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_EnableOpenGL

    [/autoit]
  • Happy Glückwunsch Andy zum 47'ten

    • Andy
    • 4. Februar 2013 um 19:52

    Vielen lieben Dank an euch alle!

    Es macht echt Spass, Teil von eurem "Sauhaufen" zu sein!!! :thumbup:

  • Digital Uhr

    • Andy
    • 4. Februar 2013 um 19:15
    Zitat

    Naja wirklich aufgefordert hab ich euch nicht, da Andy meinte dass man mein Code noch stark kürzen kann, ging ich von der annahme aus, dass dieser jemand dies auch tut

    dieser jemand hat dein 900-Zeilen Script mit nahezu identischer Funktion in 50 Zeilen Code gebracht. Und zwar schon vor etlicher Zeit, s. Links zu den "Digitaluhr"-Threads und mein weiter oben gepostetes Script.

    "Stark kürzen"....das macht man bei Code und bei Usern, bei denen eine Chance besteht, dass sie etwas davon/dabei lernen.
    Da ich neben meiner Arbeit und den wenigen Stunden zusammen mit meiner Familie auch "just for Fun" programmiere, lehne ich es aber ab, nach Statements wie diesem:

    Zitat

    Versteht ihr nicht, dass ich überhauptnicht auf kurze Quelcodes oder Ressourcen Sparrend aus bin?
    Ich werde dafür nicht bezahlt ich mach dass hier just for fun.
    Und wollte einfach nur mal Zeigen wie man dass Ganze im "Schachtel" prinzip macht.
    Wie eine kollegin mal Sagte
    "Weisst du, Experimentieren und auserhalb der "Norm" zu Denken, ist vielen ein "Fremdwort" oder garnicht erst Möglich"

    jemandem, der sich nach eigenem dafürhalten "Experimentieren und ausserhalb der Norm zu denken" auf die Fahne geschrieben hat, auch noch 900 Zeilen seines aufgeblähten Codes zu beackern. Der Code funktioniert ja....

    Aber wenigstens ICH habe wieder etwas gelernt^^. Beim nächsten Posting bzw. Nachfrage werde ich mich dezent zurückhalten und NICHTS beitragen, wie sich das in einem ordentlichen Forum gehört.

  • einfacher AutoIt/GDI+ Leistungstest

    • Andy
    • 3. Februar 2013 um 08:00

    :thumbup:, DAS nenne ich mal einen schönen Einstand ins Forum!

    Spoiler anzeigen
    Code
    ########################################################################################################################
    #####################################################  Dateibeginn  ####################################################
    ########################################################################################################################
    
    
    
    
    
    
    Software-Informationen
    ------------------------------------------------------------------------------------------------------------------------
    Programmtitel:				AutoIt/GDI+ Benchmark
    Programmversion:			1.0.0.2
    Autor:					SBond
    Erstellungsdatum:			15.01.2013
    letztes Update:				17.01.2013
    Lizenz:					Freeware
    
    
    Informationen:				Mit diesem kleinen Programm ist es möglich, eine Leistungsanalyse von AutoIt und GDI+ durchzuführen, 
    					um diese anschließend vergleichen zu können.
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    allgemeine Benchmark-Informationen
    ------------------------------------------------------------------------------------------------------------------------
    Datum:					03.02.2013
    Zeit:					16:49:42
    
    
    Benchmark-Dauer:			159.07 s
    Grafik-breite				660
    Grafik-höhe:				300
    Grafik-Pixel:				198000
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Computer-Informationen
    ------------------------------------------------------------------------------------------------------------------------
    CPU-Architektur:			X64
    CPU-Clock:				3012 MHz
    CPU-Identifier:				x86 Family 16 Model 6 Stepping 3
    CPU-Name:				AMD Athlon(tm) II X2 250 Processor
    
    
    Betriebssystem:				WIN_XP
    Build:					2600
    Service-Pack:				Service Pack 3
    Betriebssystem-Architektur:		X86
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Test 01/16:    von 1 bis 100.000.000 zählen... (dies kann einige Sekunden dauern)
    ------------------------------------------------------------------------------------------------------------------------
    gemessene Zeit:				19.5082 s
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Test 02/16:    immer eine Linie in den Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0012 s
    Plottfrequenz:				588.162 Hz
    Bildfrequenz (FPS):			0.891 Hz
    Plottzeit für einen Wert:		1.7 ms
    Plottzeit für ein Bild (660 Werte):	1122 ms
    
    
    
    
    
    
    Test 03/16:    immer eine Linie in den Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 1
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0013 s
    Plottfrequenz:				640.396 Hz
    Bildfrequenz (FPS):			0.97 Hz
    Plottzeit für einen Wert:		1.562 ms
    Plottzeit für ein Bild (660 Werte):	1030.92 ms
    
    
    
    
    
    
    Test 04/16:    immer eine Linie in den Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 2
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0007 s
    Plottfrequenz:				667.442 Hz
    Bildfrequenz (FPS):			1.011 Hz
    Plottzeit für einen Wert:		1.498 ms
    Plottzeit für ein Bild (660 Werte):	988.68 ms
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Test 05/16:    immer eine Linie in den Frontbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0001 s
    Plottfrequenz:				8406.395 Hz
    Bildfrequenz (FPS):			12.737 Hz
    Plottzeit für einen Wert:		0.119 ms
    Plottzeit für ein Bild (660 Werte):	78.54 ms
    
    
    
    
    
    
    Test 06/16:    immer eine Linie in den Frontbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 1
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0001 s
    Plottfrequenz:				8359.521 Hz
    Bildfrequenz (FPS):			12.666 Hz
    Plottzeit für einen Wert:		0.12 ms
    Plottzeit für ein Bild (660 Werte):	79.2 ms
    
    
    
    
    
    
    Test 07/16:    immer eine Linie in den Frontbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 2
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0001 s
    Plottfrequenz:				7827.152 Hz
    Bildfrequenz (FPS):			11.859 Hz
    Plottzeit für einen Wert:		0.128 ms
    Plottzeit für ein Bild (660 Werte):	84.48 ms
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Test 08/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0001 s
    Plottfrequenz:				10189.123 Hz
    Bildfrequenz (FPS):			15.438 Hz
    Plottzeit für einen Wert:		0.098 ms
    Plottzeit für ein Bild (660 Werte):	64.68 ms
    
    
    
    
    
    
    Test 09/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 1
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8 s
    Plottfrequenz:				9542.125 Hz
    Bildfrequenz (FPS):			14.458 Hz
    Plottzeit für einen Wert:		0.105 ms
    Plottzeit für ein Bild (660 Werte):	69.3 ms
    
    
    
    
    
    
    Test 10/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 2
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0002 s
    Plottfrequenz:				10240.119 Hz
    Bildfrequenz (FPS):			15.515 Hz
    Plottzeit für einen Wert:		0.098 ms
    Plottzeit für ein Bild (660 Werte):	64.68 ms
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Test 11/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 1
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8 s
    Plottfrequenz:				9236.75 Hz
    Bildfrequenz (FPS):			13.995 Hz
    Plottzeit für einen Wert:		0.108 ms
    Plottzeit für ein Bild (660 Werte):	71.28 ms
    
    
    
    
    
    
    Test 12/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 2
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0001 s
    Plottfrequenz:				10453.494 Hz
    Bildfrequenz (FPS):			15.839 Hz
    Plottzeit für einen Wert:		0.096 ms
    Plottzeit für ein Bild (660 Werte):	63.36 ms
    
    
    
    
    
    
    Test 13/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 3
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0001 s
    Plottfrequenz:				10119.249 Hz
    Bildfrequenz (FPS):			15.332 Hz
    Plottzeit für einen Wert:		0.099 ms
    Plottzeit für ein Bild (660 Werte):	65.34 ms
    
    
    
    
    
    
    Test 14/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 4
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8 s
    Plottfrequenz:				9628.875 Hz
    Bildfrequenz (FPS):			14.589 Hz
    Plottzeit für einen Wert:		0.104 ms
    Plottzeit für ein Bild (660 Werte):	68.64 ms
    
    
    
    
    
    
    Test 15/16:    nur den fertigen Backbuffer zeichnen...  Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 5
    ------------------------------------------------------------------------------------------------------------------------
    eingestellte Messdauer:			8 s
    gemessene Zeit:				8.0002 s
    Plottfrequenz:				6124.972 Hz
    Bildfrequenz (FPS):			9.28 Hz
    Plottzeit für einen Wert:		0.163 ms
    Plottzeit für ein Bild (660 Werte):	107.58 ms
    
    
    
    
    
    
    ########################################################################################################################
    
    
    
    
    
    
    Test 16/16:    nur den fertigen Backbuffer zeichnen... , Rendermodus: 0, Einzelpixel (dies kann einige Sekunden dauern)
    ------------------------------------------------------------------------------------------------------------------------
    gemessene Zeit:				27.4933 s
    
    
    
    
    
    
    ########################################################################################################################
    ######################################################  Dateiende  #####################################################
    ########################################################################################################################
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™