Ändern von Farben -Verschiedene Wege - Seltsamme Geschw.
Verfasst: 31.03.2009 01:13
Tachchen,
der Titel wirk etwas seltsam aber es ist halt so.
Vorgabe: Eine RGB-Farbe soll in jedem Farbwert um 5 erhöht werden.
Dafür gibs ja verschiedene Wege:
- Normal, mit Red(), Green(), Blue(), RGB()
- Anders, mit <<, >> und & $FF
- Pointer, speicher direkt ändern
Meine Ausgabe ist:
Das die Andere Variante mit <<,>>,& schneller ist als die Normale ist klar.
Aber warum ist eine direkte addition von 1 in jedem Character in der Farbe langsammer als wenn man erst noch Bitverschiebung usw. machen muss?
der Titel wirk etwas seltsam aber es ist halt so.
Vorgabe: Eine RGB-Farbe soll in jedem Farbwert um 5 erhöht werden.
Dafür gibs ja verschiedene Wege:
- Normal, mit Red(), Green(), Blue(), RGB()
- Anders, mit <<, >> und & $FF
- Pointer, speicher direkt ändern
Code: Alles auswählen
Procedure Normal(Color, Add)
Protected R, G, B
R = Red(Color) + Add
G = Green(Color) + Add
B = Blue(Color) + Add
ProcedureReturn RGB(R,G,B)
EndProcedure
Procedure Anders(Color, Add)
Protected R, G, B
R = Color & $FF + Add
G = Color>>8 & $FF + Add
B = Color>>16 & $FF + Add
ProcedureReturn R + G<<8 + B<<16
EndProcedure
Structure Color
R.c : G.c : B.c : A.c
EndStructure
Procedure Pointer(Color, Add)
Protected *Color.Color = @Color
With *Color
\R + Add
\G + Add
\B + Add
EndWith
ProcedureReturn Color
EndProcedure
#Size = 50000000
Time = ElapsedMilliseconds()
For n = 1 To #Size
Normal($F0A050, 5)
Next
Time1 = ElapsedMilliseconds()-Time
Time = ElapsedMilliseconds()
For n = 1 To #Size
Anders($F0A050, 5)
Next
Time2 = ElapsedMilliseconds()-Time
Time = ElapsedMilliseconds()
For n = 1 To #Size
Pointer($F0A050, 5)
Next
Time3 = ElapsedMilliseconds()-Time
MessageRequester("Testergebnis", "Time1: "+Str(Time1)+Chr(10)+"Time2: "+Str(Time2)+Chr(10)+"Time3: "+Str(Time3))
Nun stellt sich mir die frage wieso die Pointer Variante am längst braucht ?---------------------------
Testergebnis
---------------------------
Time1: 2187
Time2: 875
Time3: 2953
---------------------------
OK
---------------------------
Das die Andere Variante mit <<,>>,& schneller ist als die Normale ist klar.
Aber warum ist eine direkte addition von 1 in jedem Character in der Farbe langsammer als wenn man erst noch Bitverschiebung usw. machen muss?