Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schwarz = Schwarz oder doch nur 80% Schwarz? (https://www.delphipraxis.net/97679-schwarz-%3D-schwarz-oder-doch-nur-80-schwarz.html)

Alex_ITA01 14. Aug 2007 13:15


Schwarz = Schwarz oder doch nur 80% Schwarz?
 
Hallo zusammen,
ich habe mal wieder ein kleines Problem.
Wenn ich mit Scanline eine Zeile in einem Bitmap analysiere bekomme ich ein Zeiger auf PRGBQuad zurück. Dieser sagt mir, wieviel grün, blau und rot in dem Pixel ist.
Ich würde jetzt gerne eine Funktion schreiben, der ich ein Toleranzwert geben kann.
Das heißt ich sage der Funktion 80% Schwarz.
Dann soll mir die Funktion ein Pixel analysieren und sagen, ob das Pixel mindestens 80% schwarz ist.
Ich hoffe ihr könnt mir da weiter helfen.
Danke
Alex

dajuhsa 14. Aug 2007 13:23

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
schwarz hat den wert 000000. und 20% nicht schwarz (80% schwarz) vielleicht 505050. also wenn ein r-, g- oder b-wert > 50 ist oder die einzelnen werte zu weit auseinander sind: kein schwarz. ansonsten: pseudo-schwarz.
ich hoffe das klappt soweit

negaH 14. Aug 2007 13:25

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
zB. RGB in YCbCr umwandeln, der Y Wert definiert die schwarz-weis Helligkeit. Dann überprüfen ob der Wert zwischen 0 bis 20% liegt.

dajuhsa Vorschlag wird nicht ganz exakt funktionieren da die Helligkeit einer gemischten Farbe auch von den Farbanteilen abhängen. Dh. ein Wert wie 0x23 für Blau ist nicht gleichhell wie der Wert 0x23 für Rot.

[edit]
Shima's nachfolgender Vorschlag macht genau das was die Umwandlung von RGB nach YCbCr macht, eben nur den Y Anteil ausrechnen.
[/edit]

Gruß Hagen

shmia 14. Aug 2007 13:26

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
Folgende Funktion gibt die Helligkeit als Wert zwischen 0 und 255 zurück.
Die einzelnen Farbanteile werden unterschiedlich stark gewichtet (menschliches Auge ist grünempfindlich).
Delphi-Quellcode:
function Intensity(Color: TColor): Integer;
begin
  Color := ColorToRGB(Color);
  Result := GetBValue(Color) * 21      // Blue
    + GetGValue(Color) * 174   // Green
    + GetRValue(Color) * 61; // Red
  Result := Result shr 8;
end;
Wenn also die Itensität grösser als 0.2 * 255 ist, das ist der Punkt heller als "80% schwarz".

Alex_ITA01 14. Aug 2007 13:32

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
Das bedeutet, nach deiner Funktion (shmia), dass wenn die Intensität größer als 0,6 * 255 ist, dass es sich um 40 % Schwarz handelt?

MFG Alex

Alex_ITA01 14. Aug 2007 13:43

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
Achso, ich habe auch kein TColor den ich übergeben kann.
Ich habe ja nur 3 Bytes die für rot, grün und blau stehen (PRBGQuad).

Wie wandel ich dann deine Funktion um?

MFg Alex

negaH 14. Aug 2007 13:46

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
Ja, da 60/100 = 0.6 = 60% Helligkeit identisch zu 60% Weis wäre, anteilmäßig verbleiben dann 40% Schwarz. Möchtest du 100% Schwarz haben dann heist die 0% Weis = 0% helligkeit = Intensity() = 0.

Gruß Hagen

negaH 14. Aug 2007 13:47

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
RGBToColor(R,G,B):TColor

Gruß Hagen

Alex_ITA01 14. Aug 2007 13:48

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
danke schön. werde es gleich testen

Alex

negaH 14. Aug 2007 13:51

Re: Schwarz = Schwarz oder doch nur 80% Schwarz?
 
Du Kannst die Funktion auch umschreiben

Delphi-Quellcode:
function Intensity(R,G,B: Byte): Integer; overload;
begin
  Result := (R * 61 + G * 174 + B * 21) div 256;
end;
Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.
Seite 1 von 2  1 2      

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