Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Farben kombinieren (https://www.delphipraxis.net/83413-farben-kombinieren.html)

Alexander Roth 3. Jan 2007 10:59

Re: Farben kombinieren
 
:roteyes:
Also ich bin jetzt a bissel verwirrt.
Also um alle Missverständnisse aufzuklären:
Ich will eine Mischung wie bei echten Lichtfarben (und kein Malkasten). Das heißt also Additive Farbsynthese, und keine Farbmischung!!!


Zitat:

Zitat von Reinhard Kern
das war/ist das Problem von Anfang an: schon die Fragestellung enthält einen Denkfehler - wenn man addiert und den Übertrag abschneidet (wie gefordert, "weisser als weiss geht nicht"), dann erhält man automatisch Veränderungen des Farbtons: Rot FF + Rot FF gibt eben Rot FF, Grün 40 + Grün 40 gibt Grün 80, d.h. der relative Anteil von Grün hat sich verdoppelt. Anders gesagt, Addieren und Mischen sind ein Widerspruch in sich, beides geht nicht, es sei denn, man beschränkt sich auf Sternenhimmel ohne Mond.

Das ist das Problem. Wie kriegt man das gelöst?

Könnte man vielleicht normal addieren, (ohne abschneiden auf 255) und dann alles auf 255 runterskalieren?
Wäre das eine Lösung?

Gruß Alexander

Reinhard Kern 3. Jan 2007 12:40

Re: Farben kombinieren
 
Zitat:

Zitat von Alexander Roth
:roteyes:
Also ich bin jetzt a bissel verwirrt.
Also um alle Missverständnisse aufzuklären:
Ich will eine Mischung wie bei echten Lichtfarben (und kein Malkasten). Das heißt also Additive Farbsynthese, und keine Farbmischung!!!


Zitat:

Zitat von Reinhard Kern
das war/ist das Problem von Anfang an: schon die Fragestellung enthält einen Denkfehler - wenn man addiert und den Übertrag abschneidet (wie gefordert, "weisser als weiss geht nicht"), dann erhält man automatisch Veränderungen des Farbtons: Rot FF + Rot FF gibt eben Rot FF, Grün 40 + Grün 40 gibt Grün 80, d.h. der relative Anteil von Grün hat sich verdoppelt. Anders gesagt, Addieren und Mischen sind ein Widerspruch in sich, beides geht nicht, es sei denn, man beschränkt sich auf Sternenhimmel ohne Mond.

Das ist das Problem. Wie kriegt man das gelöst?

Könnte man vielleicht normal addieren, (ohne abschneiden auf 255) und dann alles auf 255 runterskalieren?
Wäre das eine Lösung?

Gruß Alexander

Hallo,

dann ist addieren und dividieren durch 2 (allgemein für n>2 Durchschnitt) schon das Richtige: so addieren sich zwei nebeneinanderliegende Pixel eines Farbbildschirms auf grössere Entfernung. Additiv ist das deswegen, weil RGB ja das Farbmodell für additive Systeme wie einen selbstleuchtenden Bildschirm ist. Für den Malkasten gilt das komplementäre System der Druckfarben (Cyan-Magenta-Gelb) und eine andere Rechnung, weil sich da alles zu schwarz addiert.

Nebenbei bemerkt: BitBlt sind per Definitionem bitweise logische Operationen, Farben addieren oder Mischen geht damit grundsätzlich nicht, weil Addieren weder eine bitweise noch eine logische Operation ist.

Gruss Reinhard
Es genügt nicht, einen Algorithmus nicht zu verstehen, man muss auch unfähig sein, ihn in Programmcode umzusetzen.

Alexander Roth 3. Jan 2007 15:33

Re: Farben kombinieren
 
Sicher dass der Mittelwert das richtige ist?

Ich habe die Farben nochmal überdacht und es müsste so heißen:
weis+grün = sehr helles grün
schwarz+grün=grün
schwarz+weis=weis


Tschüss

Alexander

kalmi01 3. Jan 2007 16:42

Re: Farben kombinieren
 
Zitat:

Zitat von Alexander Roth
Ich habe die Farben nochmal überdacht und es müsste so heißen:
weis+grün = sehr helles grün
schwarz+grün=grün
schwarz+weis=weis

Sieht für mich so aus, als wenn Du nicht die Farben, sondern die Luminanzen addieren willst.

Was ergibt 50% Schwarz (=Grau) + 100% Rot
nach Deiner Meinung ?
Ein dunkleres Rot oder ein blasseres Rot ?

Du hast immer was mit SCHWARZ oder WEISS gemischt, was ist bei Farbe + Farbe ?

Alexander Roth 3. Jan 2007 17:03

Re: Farben kombinieren
 
Es bleibt wie ich gesagt habe. Es muss die Additive Farbsynthese sein!

Zitat:

Zitat von kalmi01
Was ergibt 50% Schwarz (=Grau) + 100% Rot
nach Deiner Meinung ?
Ein dunkleres Rot oder ein blasseres Rot ?

Blasseres Rot. nach der Additive Farbsynthese müsste das so sein.

Doch die Frage ist: Wie kriege ich die Additive Farbsynthese bei RGB Farben hin?


Gruß Alexander

Reinhard Kern 3. Jan 2007 17:58

Re: Farben kombinieren
 
Zitat:

Zitat von Alexander Roth
Sicher dass der Mittelwert das richtige ist?

Ich habe die Farben nochmal überdacht und es müsste so heißen:
weis+grün = sehr helles grün
schwarz+grün=grün
schwarz+weis=weis


Tschüss

Alexander

Hallo, falsch gedacht.

Wenn du auf einem Bildschirm abwechselnd schwarze und weisse Punkte setzt, bekommst du nicht weiss, sondern mittelgrau, das macht man ja auch absichtlich so (dithering). Wenn ein RGB-Bildschirm nicht das Additive Farbmodell ist, weiss ich beim besten Willen nicht, was du dir darunter vorstellen willst.

Aber selbstverständlich kannst du dir völlig eigene Addiertheoreme definieren, du musst dann bloss eine passende Software dafür schreiben. Dann ist alles erlaubt.

Gruss Reinhard

Namenloser 3. Jan 2007 18:59

Re: Farben kombinieren
 
Es geht hier aber nicht ums Dithering, sondern um die ADDITIVE FARBSYNTHESE!

und die beruht, wie der name schon sagt, darauf, dass zwei farben addiert werden.
und das ginge ja einfach so:
Delphi-Quellcode:
function AddColors(color1,color2: tcolor): TColor;
var r1, g1, b1,
    r2, g2, b2: byte
    r3, g3, b3: integer;
begin
  // falls es sich um eine Windows-Standartfarbe wie z.b clBtnface handelt:
  color1 := colortorgb(color1);
  color2 := colortorgb(color2);
 
  // zerlegen von Farbe 1
  r1 := getrvalue(color1); // ROT
  g1 := getgvalue(color1); // GRÜN
  b1 := getbvalue(color1); // BLAU
  // zerlegen von Farbe 2
  r2 := getrvalue(color2); // ROT
  g2 := getgvalue(color2); // GRÜN
  b2 := getbvalue(color1); // BLAU
  // addieren
  r3 := r1+r2;
  if r3 > 255 then r := 255;
  g3 := g1+g2;
  if g3 > 255 then g := 255;
  b3 := b1+b2;
  if b3 > 255 then b := 255;
 
  // farbwerte zusammensetzen
  result := rgb(r3,g3,b3);
end;
(Zugegebenermaßen nicht gerade optimiert)

Aber das geht mit der additiven Farbmischung nciht:
weis+grün = sehr helles grün <-- wäre weiß
schwarz+grün=grün <-- stimmt
schwarz+weis=weis <-- stimmt

Alexander Roth 4. Jan 2007 08:23

Re: Farben kombinieren
 
Zitat:

Zitat von NamenLozer
Es geht hier aber nicht ums Dithering, sondern um die ADDITIVE FARBSYNTHESE!

und die beruht, wie der name schon sagt, darauf, dass zwei farben addiert werden.
und das ginge ja einfach so:
Delphi-Quellcode:
function AddColors(color1,color2: tcolor): TColor;
var r1, g1, b1,
    r2, g2, b2: byte
    r3, g3, b3: integer;
begin
  // falls es sich um eine Windows-Standartfarbe wie z.b clBtnface handelt:
  color1 := colortorgb(color1);
  color2 := colortorgb(color2);
 
  // zerlegen von Farbe 1
  r1 := getrvalue(color1); // ROT
  g1 := getgvalue(color1); // GRÜN
  b1 := getbvalue(color1); // BLAU
  // zerlegen von Farbe 2
  r2 := getrvalue(color2); // ROT
  g2 := getgvalue(color2); // GRÜN
  b2 := getbvalue(color1); // BLAU
  // addieren
  r3 := r1+r2;
  if r3 > 255 then r := 255;
  g3 := g1+g2;
  if g3 > 255 then g := 255;
  b3 := b1+b2;
  if b3 > 255 then b := 255;
 
  // farbwerte zusammensetzen
  result := rgb(r3,g3,b3);
end;
(Zugegebenermaßen nicht gerade optimiert)

Super!!! Danke. Ich probiere es aus sobald meine Arbeit (trotz Ferien :cry: ) es zulässt.


Zitat:

Zitat von NamenLozer
weis+grün = sehr helles grün <-- wäre weiß
schwarz+grün=grün &lt;-- stimmt
schwarz+weis=weis &lt;-- stimmt

Dann hatte ich ja doch von Anfang an recht.


@Reinhard Kern:
ich glaube dein denkfehler ist, dass schwarz eine Frabe ist. Das ist sie nämlich NICHT!!! Jedenfalls bei den normalen Lichtfarben. Sieht man auch auf den Bild Da ist alles mit einer schwarzen "Farbe" hinterlegt und sie hat keinen Einfluss auf das schöne ungetrübte Weis in der Mitte.



EDIT:
:dance: :dance: :dance: :dance:
:-D Es funktioniert!!! Super!!! Problem gelöst!!!

Danke an alle für eure Hilfe!

Gruß Alexander


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.
Seite 3 von 3     123   

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