Entwickler-Ecke

Multimedia / Grafik - Wie mische ich Farben?


bms - So 09.09.07 05:20
Titel: Wie mische ich Farben?
Eigentlich dachte ich, daß es einfach ist, aber irgendwo habe ich einen Knoten in der Überlegung. In dem Beispiel mixe ich die blaue mit der gelben Farbe. Rauskommen sollte Grün, kommt aber Grau. Wie man sieht zerlege ich die zuerst die Farben in die Grundfarben. Theoretisch müßte es klappen, aber irgendwo ist der Fehler drinn.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button1Click(Sender: TObject);
var
  R, G, B: Integer;
  R1, G1, B1: Integer;
  R2, G2, B2: Integer;
begin
  R1 := GetRValue(clYellow);
  G1 := GetGValue(clYellow);
  B1 := GetBValue(clYellow);

  R2 := GetRValue(clBlue);
  G2 := GetGValue(clBlue);
  B2 := GetBValue(clBlue);

  R := (R1 + R2) div 2;
  G := (G1 + G2) div 2;
  B := (B1 + B2) div 2;

  Color := RGB(R, G, B);
end;


Reinhard Kern - So 09.09.07 07:47
Titel: Re: Wie mische ich Farben?
user profile iconbms hat folgendes geschrieben:
Eigentlich dachte ich, daß es einfach ist, aber irgendwo habe ich einen Knoten in der Überlegung. In dem Beispiel mixe ich die blaue mit der gelben Farbe. Rauskommen sollte Grün, kommt aber Grau. Wie man sieht zerlege ich die zuerst die Farben in die Grundfarben. Theoretisch müßte es klappen, aber irgendwo ist der Fehler drinn.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var
  R, G, B: Integer;
  R1, G1, B1: Integer;
  R2, G2, B2: Integer;
begin
  R1 := GetRValue(clYellow);
  {...}
end;


Hallo,

probier mal R1 := GetRValue (ColorToRGB (clYellow)); usw.

Gruss Reinhard


Gausi - So 09.09.07 09:54

Im RGB-Modell gibt Gelb und Blau zusammen nunmal nicht grün. Schau dir mal die RGB-Werte für Gelb an: 255-255-0. Hier wird also Rot und Grün "gemischt", und heraus kommt ein strahlendes Gelb. Würde man beim Streichen und rumspielen mit Farbeimern auch nicht erhalten. Blau ist 0-0-255. Merkste was, warum dann Grau raus kommt? ;-)

Hat was damit zu tun, dass RGB ein additives Farbmodell ist, und was man so beim Farben mischen im realen Leben bekommt, eher einem subtraktivem Modell wie CMYK entspricht. Probier mal, die RGB-Werte von gelb und blau zuerst in den CMYK-Raum zu übersetzen, deine Rechnung dort durchzuführen und anschließend zurück konvertieren.


Corpsman - So 09.09.07 10:19

rgb = 1 - (cmy)

c'm'y'k : k = min ( c,m,y ) c'm'y'= cmy - k

falls du nicht weist was cmyk ist.


Gausi - So 09.09.07 10:23

Hab das aber grade mal ausprobiert. Das mit dem Mittelwert klappt da auch nicht. :nixweiss:


ultra2k - Mo 10.09.07 01:58

Hi, ich hab grad ein Problem von mir gepostet in dem sich glaube ich schon die Antwort auf dein Problem befindet :wink:

http://www.delphi-forum.de/topic_Scanline+zu+langsam+warum+oO_76194.html