Du solltest die Größen der GUI Elemente / Schriftgrößen entsprechend anpassen. -> https://www.autoitscript.com/forum/topic/16…app-workaround/
Beiträge von UEZ
-
-
Und noch'ne Spielerei -> GDI Particle Repulsion Grid (einfach die Maus über das Bild bewegen...)
Mit AutoIt nicht in dieser Geschwindigkeit realisierbar.
Edit: jetzt noch mit Scroller und Tracker Sound
GDI Particle Repulsion Grid v1 + sound build 2016-10-13.png -
-
Hast du es mal mit _Resource_GetAsIcon() probiert?
Da du kein Beispiel hochgeladen hast, kann ich selbst nicht testen.
-
-
Auch von mir ein "Happy Birthday" und alles Gute für die Zukunft.
-
OpenGL in FB hat "nur" 7 FPS, allerdings bei 130000 Rechtecken/Sekunde und ca. 1 Million Recursions-Calls
Meine Werte:
PT.pngBei der gleichen Rekursionstiefe wie bei GDI, komme ich auf ca. 70 FPS, ca. 300.000 Rekursionsaufrufe pro Sekunde und 4095 Rechtecken pro Funktionsaufruf.

-
-
Und noch ein Beispiel in GDI / GDI+ / OpenGL in Au3 und FB: Animated Pythagoras Tree
-
-
Das habe ich bei mir noch gefunden:
AutoIt
Alles anzeigen#include <Array.au3> $numbers = "40,3,-2.5,-10,1000,-20202.188, +50,-1.937462,3.14" ConsoleWrite("Fünftkleinste Zahl: " & nNumber($numbers, 5, 0) & @CRLF) ; fünftkleinste Zahl ConsoleWrite("Drittgrößte Zahl: " & nNumber($numbers, 3, 1) & @CRLF) ; drittgrößte Zahl ; #FUNCTION# ===================================================================================================================== ; Name...........: nthNumber ; Description ...: Returns the nth biggest or smallest number ; Syntax.........: nNumber($numbers, $n, $dir = 0) ; Parameters ....: $numbers - the numbers either from a string or from an array ; $n - search for n biggest or smallest number where n is an integer ; $dir - 0 search for smallest number, 1 for biggest number ; Return values .: Success - Returns the appropriate number and set @error to 0 ; Failure - Returns error code: ; 1 - Wrong delimiter in string! Valid is comma (,) only! ; 2 - No numbers found! ; 3 - n is not an integer ; 4 - n is not in boundary of amount of numbers ; Remarks .......: Needs the function CompSort() for sorting the internal array ; Author ........: UEZ ; Version .......: 0.90 Build 2010-11-11 Beta ; ================================================================================================================================ Func nNumber($numbers, $n, $dir = 0) If IsArray($numbers) Then $num = _ArrayToString($numbers, ",") If @error Then Return SetError(1, 0, "Error! Wrong delimiter in string! Valide is comma (,) only!") $numbers = $num EndIf Local $aNum = StringRegExp($numbers, "(-\d+\.\d+|\d+\.\d+|\d+)", 3) If Not IsArray($aNum) Then Return SetError(2, 0, "Error! No numbers found!") If Not IsInt($n) Then Return SetError(3, 0, "Error! n is not an integer") If $n < 1 Or $n > UBound($aNum) - 1 Then Return SetError(4, 0, "Error! n is not in boundary of amount of numbers") CompSort($aNum) If Not $dir Then Return $aNum[$n - 1] ;n smallest number Return $aNum[UBound($aNum) - $n] ;n biggest number EndFunc ;Die Komplexität liegt je nach Ausgangssituation zwischen O(n^2) (Worst-Case) und O(n*log(n)) (Best-Case). ;Im Best-Case ist die Liste der zu sortierenden Elemente geordnet, sobald die Schrittlänge 1 beträgt. ;Im Worst-Case müssen alle benachbarten Elemente nochmals getauscht werden (mehrere Durchgänge mit Schrittlänge 1). ;In diesem Fall ist Combsort nicht schneller als Bubblesort. ;Speicherverbrauch: O(c) ;Shrink-Faktor: 1/(1-1/e^phi) = 1.247330950103979, phi = 1.61803398874994 Func CompSort(ByRef $aArray) Local $gap = UBound($aArray) Local $swaps, $i, $tmp Do $gap = Int($gap / 1.247330950103979) If $gap < 1 Then $gap = 1 $i = 0 $swaps = 0 Do If Number($aArray[$i]) > Number($aArray[$i + $gap]) Then $tmp= Number($aArray[$i]) $aArray[$i] = Number($aArray[$i + $gap]) $aArray[$i + $gap] = $tmp $swaps = 1 EndIf $i += 1 Until $i + $gap > UBound($aArray) - 1 Until $gap = 1 And $swaps = 0 EndFunc -
Ich bin ziemlich sicher, dass mindestens noch ein Faktor 5-10 in der Geschwindigkeit der Berechnung machbar wäre, würde man die FPU-Sequenz in Assembler handcoden....von SSE mit 4 gleichzeitig berechenbaren Arrayinhalten garnicht zu reden. Die Compilereinstellung zur Verwendung von SSE bringt übrigens keinen Vorteil, die "schnelleren" Befehle werden gänzlich von unproduktiven Zugriffen auf den Speicher ausgebremst
Ich habe auch mal die schnelleren Sin/Cos Funktionen von Eukalyptus benutzt, aber das sehe ich kein Geschwindigkeitsgewinn. D.h. ich kann das nur bestätigen, was du geschrieben hast.
Habt ihr das mal mit Direct2D probiert?
Ich kann dir nicht sagen, warum ich und einige andere immer auf GDI/GDI+ herumreiten, obwohl es bessere Gfx Libs gibt, wie z.B. die Direct2D UDF.
Vielleicht "Macht der Gewohnheit" oder weil's leichter fällt oder einfach nur Sturheit... -
-
Ich wollte keinen neuen Thread dafür aufmachen, also hier der Battle GDI vs GDI+ anhand eines Tunnel Fluges.
Tunnel Flight - WipeOut Style.jpg
Original JS: http://js1k.com/2010-first/demo/763
Im Anhang unten die Source Codes + kompilierte Exe Dateien.
-
-
Du könntest immer Englisch als Sprache wählen:
AutoIt
Alles anzeigen#include <WinAPI.au3> Opt("MustDeclareVars", 1) Global $hHookMsgBox _MsgBoxEnglish(0, "Title", "Text") _MsgBoxEnglish(1, "Title", "Text") _MsgBoxEnglish(2, "Title", "Text") _MsgBoxEnglish(3, "Title", "Text") _MsgBoxEnglish(4, "Title", "Text") _MsgBoxEnglish(5, "Title", "Text") _MsgBoxEnglish(6, "Title", "Text") _MsgBoxEnglish(7, "Title", "Text") #region English Button text for MsgBox!! ;########################################################## Func _MsgBoxEnglish($flag, $title, $text, $timeout = 0, $hwnd = 0) Local $hProcMsgBox = DllCallbackRegister("CbtHookProcMsgBox", "int", "int;int;int") Local $TIDMsgBox = _WinAPI_GetCurrentThreadId() $hHookMsgBox = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($hProcMsgBox), 0, $TIDMsgBox) Local $iRet = MsgBox($flag, $title, $text, $timeout, $hwnd) _WinAPI_UnhookWindowsHookEx($hHookMsgBox) DllCallbackFree($hProcMsgBox) Return $iRet EndFunc ;==>_MsgBoxEnglish Func CbtHookProcMsgBox($nCode, $wParam, $lParam, $hHookMsgBox) Local $RET = 0, $hBitmap = 0, $xWnd = 0 Local $sButtonText If $nCode < 0 Then $RET = _WinAPI_CallNextHookEx($hHookMsgBox, $nCode, $wParam, $lParam) Return $RET EndIf Switch $nCode Case 5 ;5=HCBT_ACTIVATE _WinAPI_SetDlgItemText($wParam, 1, "OK") _WinAPI_SetDlgItemText($wParam, 2, "Cancel") _WinAPI_SetDlgItemText($wParam, 3, "&Abort") _WinAPI_SetDlgItemText($wParam, 4, "&Retry") _WinAPI_SetDlgItemText($wParam, 5, "&Ignore") _WinAPI_SetDlgItemText($wParam, 6, "&Yes") _WinAPI_SetDlgItemText($wParam, 7, "&No") _WinAPI_SetDlgItemText($wParam, 8, "Help") _WinAPI_SetDlgItemText($wParam, 10, "&Try Again") _WinAPI_SetDlgItemText($wParam, 11, "&Continue") EndSwitch Return EndFunc ;==>CbtHookProcMsgBox Func _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString) Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _ "hwnd", $hDlg, _ "int", $nIDDlgItem, _ "str", $lpString) Return $aRet[0] EndFunc ;==>_WinAPI_SetDlgItemText ;########################################################## #endregion English Button text for MsgBox!! -
Alles anzeigen
Func _Set_PreviewPic()
For $i = 1 to 9
_GDIPlus_Startup()
Global $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(Binary($pic), True)
_WinAPI_DeleteObject(GUICtrlSendMsg($DemoPicture[$i -1], 0x0172, 0, $Bmp_Logo))
;~ _GDIPlus_BitmapDispose($Bmp_Logo)
_GDIPlus_Shutdown()
Next
EndFunc- In einer Schleife _GDIPlus_Startup() / _GDIPlus_Shutdown() macht keinen Sinn!
- $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(Binary($pic), True) liefert dir ein GDI Bitmap Handle zurück, was inkompatible zu GDI+ Bitmap Handles ist!
- GUICtrlSendMsg($DemoPicture[$i -1], 0x0172, 0, $Bmp_Logo) gibt dir wiederum ein GDI Bitmap Handle zurück, das mit _WinAPI_DeleteObject freigegeben werden muss
- Anstelle von _GDIPlus_BitmapDispose($Bmp_Logo) musst du _WinAPI_DeleteObject($Bmp_Logo) nehmen, um den Memory Leak zu unterbinden, ansonsten CRASH
-
"Load_BMP_From_Mem" ist seit längerem als "_GDIPlus_BitmapCreateFromMemory" integriert. Probiere es mal damit.
Abgesehen davon bewirkt TimerDiff($timer) > 1 immer, dass dein Skript 100% auf einem Core CPU Last erzeugt, aber ein Memory Leak kann ich nicht mit _GDIPlus_BitmapCreateFromMemory sehen.
-
-
-
Schnappschüsse kannst auch direkt aus AutoIt machen -> _ScreenCapture_Capture.
Da _ScreenCapture_Capture GDI Bitmaps erstellt, kannst du diese in GDI+ umwandeln, um die danach zu skalieren -> _GDIPlus_BitmapCreateFromHBITMAP.
Skalieren kannst du mit _GDIPlus_ImageScale, _GDIPlus_ImageResize. Das Result ist ein GDI+ Bild, d.h. du musst es wieder zurück in GDI umwandeln -> _GDIPlus_BitmapCreateHBITMAPFromBitmap.
Diese GDI Bild kannst du nun in den Clipboard kopieren und dann bequem in PP einfügen.
-
Du kannst bereits SIMD Befehle von Hause aus nutzen, das macht sogar @UEZ manchmal, wenn ich richtig sah, da er die MMX Technologie benutzt.
In diesem Beispiel "GDI Liquid Pixels" bringen die manuellen Sin/Cos Assembler Versionen ca. 25% mehr Leistung, aber dafür auf Kosten der Genauigkeit, ist aber für dieses Beispiel irrelevant.
Für hoch kritische Anwendungen, z.B. Raumfahrt, könnte es zu Problemen führen, dass die Werte zu "ungenau" sind.Ich habe leider nicht das Wissen bezüglich Compilerbau, so dass ich nicht qualitativ bewerten kann, ob der FB Compiler seinen Arbeit gut erledigt, aber da ist für spezielle Bereiche, wie grafische Verarbeitung, noch Luft nach oben.
Wie bereits erwähnt, müssten man den gleichen Codeaufbau mit verschiedenen Programmiersprachen vergleichen, was der Compiler da noch heraus kitzelt.
Der Vergleich mit AutoIt war da nur Just for Fun und eher unfair. Man vergleicht ja auch nicht ein Kleinwagen mit einem Sportwagen bezüglich Geschwindigkeit, z.B. Corsa vs. Ferrari. -
-
Wo möchtest du die Gfx einfügen?
-
Auf meinem Schlepptop läuft's mit ca. 20 FPS.
CPU: Intel Core i5-4300U
Gfx: Intel HD Graphics 4400 -
-
Ich erinnere mich an ein Script (mit Dali als Bild) bei dem das Gesicht sich verändert. Es handelt sich um autoit.de/index.php/Attachment/83460-Wave-v1-3-2-au3/ in dem ich spaßhalber Dali (aus CosinusBrothers) eingesetzt habe, läuft bei mir mit 2 FPS.
Da werden nur die Zeilen versetzt dargestellt und in diesem FB Beispiel jedes einzelne Pixel. Je mehr Pixel desto langsamer.
Aber ja, ähnlich sieht es aus.

-