Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Was ist eine negative TColor Farbe? (https://www.delphipraxis.net/166589-ist-eine-negative-tcolor-farbe.html)

Popov 20. Feb 2012 23:57

Was ist eine negative TColor Farbe?
 
Also ich habe mich noch nie um das vierte Byte des TColor gekümmert. Ich dachte immer es hat etwas mit einem Alphakanal zu tun, laut OH aber nicht. Aber das ist ja nicht die Frage. TColor wird so definiert:
Delphi-Quellcode:
type TColor = -$7FFFFFFF-1..$7FFFFFFF;
. Ok, das ist ein 32 Bit Integer, das erste Bit ist somit das Vorzeichen. Aber was ist dann eine negative Farbe? Oder ist der Wert $FFFFFFFE = Farbe -1 = 1?

Medium 21. Feb 2012 00:57

AW: Was ist eine negative TColor Farbe?
 
Die Deklaration ist einfach nur identisch mit Integer, und der eigentlich wichtige Teil ist, dass es 32 Bit sind. Das letzte Bit wird bei Farben nie wirklich als Vorzeichen interpretiert. Überhaupt ist das höchstwertige Byte reine Interpretationssache, und es gibt keine allgemeingültige Festlegung für dessen Verwendung. Manche Programme/Formate nutzen es als Art "Tag" um zwischen verschiedenen Farb-Klassen zu unterscheiden, andere wieder als Alphakanal, wieder andere ganz anders. 24 Bit würden einfach reichen, sind aber für Prozessoren so arg unhandlich. An sich ist es über, und wird daher recht frei verwendet. Das Minus ist nur der Art der Deklaration geschuldet, und hat nichts mit negativen Farben zu tun.
Es gibt zwar das subtraktive Farbsystem (CYM(K)), das bezieht sich aber darauf, dass mit hinzufügen von Farbanteilen das reflektierte Spektrum verkleinert wird (Körperfarbsystem vs. Lichtfarbsystem). Das ist ne ganz andere Nummer. Vergiss das Minus einfach :)

Sir Rufo 21. Feb 2012 01:20

AW: Was ist eine negative TColor Farbe?
 
Man lernt ja nie aus, denn ich dachte immer, dass es sich bei den negativen Werten um Systemfarben handelt a la clBackground, etc. :mrgreen:

http://www.delphipraxis.net/172522-post4.html

himitsu 21. Feb 2012 01:46

AW: Was ist eine negative TColor Farbe?
 
Es kommt drauf an.

Bei einem 32-Bit-Bitmap entspricht das höchste Byte z.B. der Transparenz.
(innerhalb des Bildes könnte man sogar sowas wie ein 10x10x10, 10x10x12- oder 11x11x10-Farbschema verwenden, als RGB, HSV oder sonstwie)

Im 24-Bit-RGB-System für Delphi-Referenz durchsuchenTColor steckt in Byte 4 meist die zugrundeliegende Farbpalette.
http://www.delphipraxis.net/4067-rgb-tcolor-rgb.html
Delphi-Quellcode:
color
  cpSystemPalette = $00;
  cpActingPalette = $01;
  cpLogicalPalette = $02;
  cpNoColor = $1F;
  cpDefaultColor = $20;
  cpSystemColor = $FF;
cpNoColor or $FFFFFF {also $1FFFFFFF} = clNone {keine Farbe}
cpSystemColor or $xx {also $FF000000 bis $FF0000FF, aber aktuell nur bis etwa $FF00001F} = Systemfarben ala clScrollBar
cpSystemPalette or $xxxxxx = RGB-System {ebenso cpActingPalette oder cpLogicalPalette, nur mit Runden auf mögliche Farben der Hardware}

http://docwiki.embarcadero.com/VCL/de/Graphics.TColor
Zitat:

Hat das höchstwertige Byte den Wert Null, erhalten Sie eine Farbe, die derjenigen in der Systempalette am ähnlichsten ist. Ist das höchstwertige Byte Eins ($01 bzw. 0x01), ergibt das eine Farbe, die derjenigen in der aktiven Palette am ähnlichsten ist. Wenn Sie das höchstwertige Byte auf Zwei ($02 bzw. 0x02) setzen, wird der Wert an die ähnlichste Farbe in der logischen Palette des aktuellen Gerätekontexts angepasst.
Auch wenn TColor quasi als LongInt deklariert ist, ist es besser, wenn man dessen Werte als LongWord interpretiert, bzw. als 4 einzelne Byte.
Erstmal ist es mit dem Palette-Byte einfacher, wenn es auch ein Byte ist
und dann sind 4 Byte (LongWord) IMHO irgendwie verständlicher/übersichtlicher, als 3 Byte und 1 ShortInt (LongInt).


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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