Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dezimaler Farbcode zu RGB? (https://www.delphipraxis.net/133092-dezimaler-farbcode-zu-rgb.html)

SonicTTH 25. Apr 2009 12:03


Dezimaler Farbcode zu RGB?
 
Hallo,

ich entwickle gerade ein programm mit dem man für das Spiel Fallout 3 die farben der interface schriften etc anpassen kann.
Die Werte für diese farben werden in einer ini datei des spiels gespeichert. Es sind dezimal zahlen, sie setzen sich so zusammen:
Rot * Grün * Blau * Alpha
255 * 255 * 255 * 255 = 4228250625
(In dem fall wäre das weiß, absolut untransparent)

Ich würde gerne wissen, wie man aus dem letzteren wert den farbwert ermitteln kann für rot, grün und blau.

Danke schonmal :)

DeddyH 25. Apr 2009 12:10

Re: Dezimaler Farbcode zu RGB?
 
Wozu denn die Multiplikation? Nimm doch einfach eine 32-Bit Unsigned so wie andere auch.

Jakob Ullmann 25. Apr 2009 12:16

Re: Dezimaler Farbcode zu RGB?
 
Also ich würde mal sagen, gar nicht. Nachher erkennst du nicht mehr, ob nun zum Beispiel Rot oder Blau 254 hatte. Denn Faktoren kann man ja bekanntlich vertauschen.

Gegenvorschlag:

Alpha*10^0 + Blau*10^3 + Grün*10^6 + Rot * 10^9

also AAABBBGGGRRR

Dann gibt es zwei Möglichkeiten das auszulesen:

Umwandlung in String -> Entsprechende Zeichen rauspicken und Zusammensetzen (oder halt Copy) -> Zurück in Integer umwandeln.

Oder, was wohl sauberer und schneller sein dürfte: Auslesen der Stellen mit
Delphi-Quellcode:
mod
(Divisionsrest) und eventuell ein bisschen shiften.

SonicTTH 25. Apr 2009 12:21

Re: Dezimaler Farbcode zu RGB?
 
Wow, wie schnell :)

Danke für die antworten, ich werde mich mal mit deinem vorschlag auseinandersetzen.

Vielen Dank :)

Jakob Ullmann 25. Apr 2009 12:26

Re: Dezimaler Farbcode zu RGB?
 
Noch ein Hinweis: Brauchst du wirklich den Alpha-Kanal? Ansonsten würde auch reichen, dass normalerweise von Delphi verwendete BGR-Schema zu verwenden, also

Delphi-Quellcode:
farbe := rgb(rot, gruen, blau); //oder
farbe := StrToInt('$' + IntToHex(blau, 2) + IntToHex(gruen, 2) + IntToHex(rot, 2));
Was im Prinzip auch mit TColor kompatibel ist, also so wie es ist zum Bleistift TForm.Color zugewiesen werden kann.

DeddyH 25. Apr 2009 12:30

Re: Dezimaler Farbcode zu RGB?
 
Das höherwertigste Byte kann man doch für den Alphakanal nutzen, ist doch eh 32-bittig.

SonicTTH 25. Apr 2009 15:36

Re: Dezimaler Farbcode zu RGB?
 
Öhm ich glaub ich hab eins nich genug betont:
Ich will nicht irgendeine farbe in einem dezimalwert ausdrücken, sondern ich muss eine bestimmte farbe so ausdrücken, dass das Spiel (Fallout 3) den von meinem programm errechneten wert korrekt interpretiert. daher muss bei der berechnung der alpha kanal dabei sein, welcher allerdings in meinem programm nicht verändert wird (also immer 256 ist), denn falls man den weglässt ist das ergebnis falsch.

DeddyH 25. Apr 2009 15:42

Re: Dezimaler Farbcode zu RGB?
 
Wenn Du uns mitteilst, in welchem Format das Spiel die Farbe erwartet, könnten wir Dir sicherlich besser helfen. Btw: Du meinst sicherlich 255 und nicht 256 ;)

Neutral General 25. Apr 2009 15:46

Re: Dezimaler Farbcode zu RGB?
 
Zitat:

Zitat von DeddyH
Das höherwertigste Byte kann man doch für den Alphakanal nutzen, ist doch eh 32-bittig.

Hi,

Dachte ich auch mal. Dem ist aber nicht so, soweit ich weiß. In dem 4. Byte werden ggf. zusätzliche Informationen gespeichert. Hat glaube ich irgendwas mit den Systemfarben zu tun.

Bsp:

Delphi-Quellcode:
Color := TColor($15FF00FF);
:arrow: Schwarz


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz