![]() |
AW: RGB zu Alpha
[QUOTE=EWeiss;1411152]
Zitat:
Mach mal
Delphi-Quellcode:
// Rgb2Alpha ist die in #1 gezeigte Funktion.
ShowMessage(IntToStr(Rgb2Alpha($FFFFB1)));
Und dann
Delphi-Quellcode:
ShowMessage(IntToStr(Rgb2Alpha(0)));
Bei mir kommt da in beiden Fällen 0 heraus. Und nun erklär mit mal, warum Deine "Rgb2Alpha" bei $FFFFB1 (ein sehr helles Cyan) und bei 0 (Schwarz) den gleichen Wert zurückgibt. |
AW: RGB zu Alpha
Zitat:
![]() Und erkenne um was es dabei geht. Das Thema ist jetzt wirklich beendet für mich. Aber ihr könnt gerne weiter diskutieren. :) gruss |
AW: RGB zu Alpha
Hallo AW,
doch noch rasch: Apro hat schon Recht; deine Funktion berechnet den Luminanz Wert für die meisten der 256^3 möglichen RGB Werte nicht korrekt. Sehr einfach kannst du es testen, indem du mit deiner Funktion die Luminanz-Werte von RGB(grau,grau,grau) für grau=0 bis 255 berechnest. Welche Werte sollte deine Funktion liefern? In E'Y = 0,299 E'R + 0,587 E'G + 0,114 E'B eingesetzt ergibt sich Y(grau) = 0,299*grau + 0,587*grau + 0,114*grau = grau = id Deine Funktion liefert jedoch meistens andere Werte (weil du nicht wie Apro dir vorschlägt das jeweilige Farbbyte mittels "and $ff" separierst):
Delphi-Quellcode:
procedure TForm71.Button1Click(Sender: TObject);
var w, grau : byte; s : string; begin s := ''; for grau := 0 to 255 do begin w := Rgb2Alpha2( RGB( grau, grau, grau ) ); s := s + w.ToString + ', '; end; showmessage( s ); end; |
AW: RGB zu Alpha
Zitat:
Werde "and $FF" addieren damit sollte das Problem beseitigt sein. Dachte eigentlich das ich mir das $FF durch das LOBYTE ersparen konnte. Wenn dem nicht so ist gut dann habe ich wieder was gelernt. Aufgrund dieser Annahme bin ich davon ausgegangen das meine Berechnung korrekt war. (Nun gut Danke man ist nicht perfekt ;) ) PS: Sichtbare unterschiede kann ich jedoch nicht ausmachen, zwischen deiner und meiner vorherigen Berechnung. Egal welche zwischen Werte am ende bei der Berechnung umhinkommen am ende zählt doch nur ob das Ergebnis 0 ist um die schwarzen Pixel zu entfernen. Alle anderen Farbigen Pixel bleiben erhalten. Das einzige Problem das ich nun noch habe ist das bei 16Farbigen Icons schwarz komplett entfernt wird. Siehe shot! gruss |
AW: RGB zu Alpha
Delphi-Quellcode:
kannst du schon nehmen, allerdings wirkt es in deiner Formel zu spät.
LOBYTE
|
AW: RGB zu Alpha
Zitat:
gruss |
AW: RGB zu Alpha
Dein Original
Delphi-Quellcode:
müsste eigentlich so aussehen
Result := LOBYTE(round(colrRGB * 0.2989)) +
LOBYTE(round((colrRGB shr 8) * 0.5870)) + LOBYTE(round((colrRGB shr 16) * 0.114));
Delphi-Quellcode:
Und wenn wir schon dabei sind:
Result := round(LOBYTE(colrRGB) * 0.2989) +
round(LOBYTE(colrRGB shr 8) * 0.5870) + round(LOBYTE(colrRGB shr 16) * 0.114);
Code:
Wo ist also der Unterschied ob ich die Luminanz mit
19595 => 0.2989 * 65536
38470 => 0.5870 * 65536 7471 => 0.1440 * 65536
Code:
berechne oder mit
l = 0.2989 * r + 0.5870 * g + 0.1440 * b
Code:
Genau, es gibt keinen Unterschied, beide Formeln berechnen exakt das Gleiche.
l = ( 19595 * r + 38470 * g + 7471 * b ) / 65536
|
AW: RGB zu Alpha
Zitat:
Danke. gruss |
AW: RGB zu Alpha
Was ich mich die ganze Zeit frage, reicht es nicht aus clFuchsia als Transparent Farbe zu setzen für Icons?
|
AW: RGB zu Alpha
Zitat:
Systemweit? Ich muss die Farbe nehmen die vom Icon übergeben wird nicht eine die ich mir wünsche. Kann den Leuten doch nicht diktieren mit welcher Hintergrundfarbe die ihre Icons zeichnen die sind nun mal so ;) gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 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