-
Forum: Multimedia
Delphi
by Klaus01,
30. Mär 2019
Hab' mich verlesen/ es falsch verstanden.
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
30. Mär 2019
. ein 32bit Value and $FF maskiert den 32bit auf ein Byte.
$FFCCDD01 and $FF ($000000FF) ergibt $01
Bit Algebra :
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
Grüße Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
ein letztes update
alpha ist wieder ein Byte (ich fühl mich wohler damit)
for y:= 0 to h do
for x := 0 to w do
begin
alpha := ((imgSpectrum and $FF000000) shr 24) and $FF;
c := imgSpectrum and $FFFFFF;
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
Je näher fading zur 1 rückt desto häufiger geht es in den else Zweig.
Bei d = 153 (f=0.6) kann _alpha nicht mehr größer als 127 werden.
alpha max = 255 und _alpha = alpha - d
Wenn man mit der Hilfsvariablen arbeitet muss alpah noch in der Berechnung angepasst werden.
if _alpha > 127 then
imgSpectrum := c or (((alpha - d) -256) shl 24)
...
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
Ja, aber mit dem Fadingwert von 0.32 häufiger in den else Zweig.
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. das mit der Hilfsvariablen ist eine gute Idee:
for y:= 0 to h do
for x := 0 to w do
begin
alpha := ((imgSpectrum and $FF000000) shr 24) and $FF;
_alpha := alpha - d;
// if alpha < 0 then
// alpha := 0;
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. der verändert sich nicht, in der Routine,
Hatte das round falsch angewendet. round(0.4) -> 0
Nun mit round(0.25 * 255) ist d dann 64
und ja, auch mit diesen Werten wird der else Zweig aufgerufen.
Wenn alpha und d entsprechende Werte haben.
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. wenn für fade 0.4 nehme (geht das erstmal nicht dem Integer zuzuweisen)
Wenn ich da ein round drumpacke dann wird das auf 0 gerundet.
Damit hängt es dann vom alpha Wert von imgSpectrm ab wie groß
der alpha - d Wert wird.
d pendelt eigentlich immer zwischen 0 und 1.
Soll das so sein?
Mit den Zufallswerten in imgSpectrum und d wird auch ab und an der else Zweig aufgerufen.
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. mach aus Deinem alpha: Integer mal ein alpha: Byte
0: begin
d := fade * 255;
// nur für Tests
//d := round((random(10) /10)) *255;
for y:= 0 to h do
for x := 0 to w do
begin
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. wenn es da funktioniert, dann kann imgSpectrumData nicht nur mit Nullen gefüllt sein.
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. aber wenn d einen wert größer als 0 hat
und alpha so berechnet wird ->
alpha := ((imgSpectrum and $FF000000) shr 24) and $FF;
alpha := alpha - d
ist dann nicht alpha immer < 0?
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. kannst Du nit die "fade" oder "d" Werte in eine Datei schreiben lassen?
Mit den Werten könnte man die Funktion dann testetn.
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. ich ging davon aus, das Daten im imgSpectrum vorhanden sind.
Wenn das Array leer ist, bzw mit 0en gefüllt, dann kann alpha nie > 127 sein.
Oder vielleicht, doch das ist dann aber abhängig von "fade".
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
Sauer sein macht Falten..
Setze doch mal eine Breakpoint auf
alpha := ((imgSpectrum and $FF000000) shr 24) and $FF;
Markiere imgSpectrum, drücke ctrl+F5
das gleiche mache mit alpha.
Editiere die beiden Watcheinträge, und lass sie als Hexwert ausgeben.
Jetzt schau mal was in den imgSpectrum Array drin steht.
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
es hat noch eine Zeile gefehlt:
alpha := (alpha div 9) - d
Habe es oben ergänzt.
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
ein Schreibfehler meinerseits: sollte imgSpectrum heißen nit
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. ein Versuch:
var
imgSpectrum: Array of Integer;
h,w: Integer;
x, dx ,y, dy: Integer;
c,d,red,green,blue: Integer;
alpha: Integer;
fade: Integer;
mEffect: Byte;
-
Forum: Multimedia
Delphi
by Klaus01,
29. Mär 2019
.. in VB6 ist long ein signed 32bit Datentyp.
Ab VB2005 ist long ein signed 64bit Datentyp.
Grüße Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
28. Mär 2019
Nö, das bleiben 32Bit Werte, wenn c ein 32Bit Wert ist.
32Bit and $FF000000 bleibt ein 32Bit Wert, c wird nur mit $FF000000 maskiert.
Anschließend 24Bit nach rechts verschoben. Links von dem verschoben Wert stehen Nullen.
Es ist aber weiterhin ein 32Bit Wert.
mit and $FF wird er zu einem Byte.
Grüße
Klaus
-
Forum: Multimedia
Delphi
by Klaus01,
28. Mär 2019
var
test32Bit: cardinal;
test8Bit: Byte;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
test32Bit := $ABCDEF89;
test8Bit := (test32Bit shr 24) and $FF;
writeLn(intToHex(test8Bit));
-
Forum: Multimedia
Delphi
by Klaus01,
28. Mär 2019
a := ((Buf shr 24) and 256) - d
$AAbbggrr shr 24
$000000AA and $FF
$AA
wenn Du 256 verwendst - passt das nicht in ein Byte
$AAbbggrr shr 24
-
Forum: Multimedia
Delphi
by Klaus01,
28. Mär 2019
.. wieso rechnest Du mit 256 - $FF entspricht 255
a := ((Buf shr 24) and 256) - d; // muss 256 hier addiert werden oder nicht!
es werden hier nicht 256 addiert - das ist eine logische Verknüpfung.
Hier wird schlicht eine Wert maskiert, vor dem "and " war der Value noch 32bit breit
mit der makierung wird erreicht das er nur noch 8Bit breit ist.
Daher nehme ich auch an, dass mit 255...
-
Forum: Multimedia
Delphi
by Klaus01,
28. Mär 2019
.. kein Problem.
if a > 127 then
SpectrumData2D := c or ((a - 256) * $1000000) // hier komm ich nicht klar wegen den $1000000
else
SpectrumData2D := c or (a * $1000000); // hier komm ich nicht klar wegen den $1000000
end;
sollte in etwas so aussehen:
-
Forum: Multimedia
Delphi
by Klaus01,
28. Mär 2019
..ist noch früh aber solltest Du nicht nach rechts shiften?
Du willst aus einem 32bit Value das Highbyte haben.
Grüße Klaus