![]() |
Get{R,G}Value liefert falsche Werte
Hallo ihr,
ich dachte ich mache einen Farbverlauf von Weiß nach Schwarz. Also dachte ich hole ich mir den Kanal-Wert multipliziere ihn mit dem Faktor und addiere dann den Kanal Wert der anderen Farbe welcher mit dem (1-Faktor) multipliziert wurde. Der Faktor ist zwischen 0 und 1 und die Farben sind Schwarz und Weiß. Bei Schwarz funktioniert auch alles und die Werte von GetRValue, GetGValue und GetBValue sind alle 0. Aber bei weiß (egal ob clWhite oder $00FFFFFF) sind die Werte "16.777.215", "65.535" und "255". Bis auf dem letzten Wert, stimmen die anderen beiden nicht. An sich ist das die Farbe komplett bzw. bei Grün die zwei Kanäle. Wie kriege ich nun die richtigen Werte heraus? MfG xZise |
Re: Get{R,G}Value liefert falsche Werte
Weise den Wert einer "Byte" Variable zu.
Edit: Ein "and $FF" sollte es auch tun. |
Re: Get{R,G}Value liefert falsche Werte
Alternativ könnte man auch einen record verwenden:
Delphi-Quellcode:
Dabei fällt mir gerade etwas auf: Kann man absolute eigentlich auch mit Parametern benutzen? Dann könnte es so noch einen Tick eleganter gehen:
TRGBQuad = packed record // ist schon in irgendeiner Unit definiert, mir fällt aber gerade nicht ein, in welcher
r, g, b, a: byte end; procedure Foo(Color: TColor); var RGB: PRGBQuad; begin RGB := PRGBQuad(@Color); ... RGB^.r := ... end;
Delphi-Quellcode:
procedure Foo(Color: TColor);
var RGB: TRGBQuad absolute Color; begin ... end; |
Re: Get{R,G}Value liefert falsche Werte
Zitat:
Delphi-Quellcode:
function GetRValue(rgb: DWORD): Byte;
begin Result := Byte(rgb); end; Zitat:
MfG xZise |
Re: Get{R,G}Value liefert falsche Werte
Moinsen,
wieso muss ich mit $FF die Daten auf 8 Bit zuschneiden? MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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