Thema: Delphi Farbwert zu Dezimal

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#20

AW: Farbwert zu Dezimal

  Alt 28. Mär 2019, 20:36
Longword gibt's ja bei Delphi auch: Bei 4 Bytes (A,R,G,B) könntest du doch auch DWORD als Datentyp nutzen?
Hier kann man ja sehen das ich auf Int64 Casten musste weil der zu berechnende Wert nicht in einen Integer passt.
a + (Int64((c and $FF000000) div $1000000) And 255);

Daher glaube ich nicht das man hier DWORD nehmen kann. Oder?

gruss
Wenn ich ich jetzt nicht verzählt habe dann ist $FF000000 und $1000000 ein 24Bit Wert, warum sollten die beiden nicht mit einem unsigned 32Bit Typ abgedeckt werden können?
Ausserdem a+(c shr 6) sollte das gleiche sein wie der obige Ausdruck. (hoffe ich hab mich bei den Bits nicht verzählt)
[ggf muß Du noch mit $FF maskieren]

Gruß
K-H
Weil der Compiler diese Meldung ausspuckt.
[DCC Warning] uSpectrum.pas(843): W1024 Combining signed and unsigned types - widened both operands

a := a + (((c and $FF000000) div $1000000) And 255);

SpectrumData2D Array als DWord definiert
a,r,g,b als DWord definiert.

Auch wenn es nur Warnungen sind sie verfälschen das Endergebnis.
Bei der Ausführung gibt es eine Range check error weil DWord nun mal keine negativen werte verträgt.

Und besagten Integerüberlauf.
SpectrumData2D[X, Y] := c or ((a - 256) shl 24)

Obwohl schon geändert..

DWord ist also der falsche DatenTyp!

gruss

Geändert von EWeiss (11. Jul 2019 um 15:56 Uhr)
  Mit Zitat antworten Zitat