AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farbwert zu Dezimal

Ein Thema von EWeiss · begonnen am 28. Mär 2019 · letzter Beitrag vom 3. Apr 2019
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz