AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farben kombinieren

Ein Thema von Alexander Roth · begonnen am 2. Jan 2007 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
Seite 2 von 3     12 3      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Farben kombinieren

  Alt 2. Jan 2007, 17:37
Additive Farbmischung geht doch ganz einfach o.ô

bitblt(canvas1.Handle,0,0,width,height,canvas2.Handle,0,0,srcand);
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Farben kombinieren

  Alt 2. Jan 2007, 18:09
Klappt nicht. Das Kombinierte Bild ist pur schwarz.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#13

Re: Farben kombinieren

  Alt 2. Jan 2007, 18:36
Zitat von Alexander Roth:
Klappt nicht. Das Kombinierte Bild ist pur schwarz.
Hallo,

ihr habt bisher übersehen, dass man in allen Fällen die resultierende Farbe renormieren müsste, sonst würde sie ja immer doppelt so hell bei gleicher Ausgangsfarbe, was nicht erwünscht ist. Ausserdem erledigt das das Überlaufproblem: ist bei beiden Ausgangsfarben Rot = F0, so ergibt (F0 + F0) / 2 , eben F0. So sollte es doch auch sein.

Um es physiologisch korrekt zu machen, müsste man die beiden Farben ins Farbdreieck eintragen, die Verbindungslinie zeichenen und halbieren. Um dem nahezukommen, kann man auch in HSL konvertieren, dann wäre S = (S1 + S2) / 2 und L = (L1 + L2) / 2, für H müsste man die Winkelhalbiernde nehmen - ich weiss bloss nicht, wie man die Zweideutigheit bei 180 Grad behandeln muss, das müsste man sich wohl an einem Farbkreis veranschaulichen.

Ganz sicher gibt es kein BitBlt, das Farben richtig mischt.

Gruss Reinhard
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#14

Re: Farben kombinieren

  Alt 2. Jan 2007, 18:49
Zitat von Reinhard Kern:
ihr habt bisher übersehen, dass man in allen Fällen die resultierende Farbe renormieren müsste, sonst würde sie ja immer doppelt so hell bei gleicher Ausgangsfarbe, was nicht erwünscht ist. Ausserdem erledigt das das Überlaufproblem: ist bei beiden Ausgangsfarben Rot = F0, so ergibt (F0 + F0) / 2 , eben F0. So sollte es doch auch sein.
Gut, dann hast du schwarz und weiß, also $FFFFFF / 2, nicht ganz das was in Beitrag 1 gefordert war, oder übersehe ich nur etwas? Ich denke mal auf genau diese Frage, was jetzt genau in welchem Verhältnis gemischt werden soll, zielte die Frage von Khabarakh ab.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#15

Re: Farben kombinieren

  Alt 2. Jan 2007, 20:13
So mach ich das immer, funkt bestens...

Delphi-Quellcode:
function SCombineColor(const Color1, Color2:DWord):DWord;
   var RGB1, RGB2, xRGB:TRGB;
begin
   ...

   xRGB.Red:= Round((RGB1.Red+ RGB2.Red) / 2);
   xRGB.Green:=Round((RGB1.Green+RGB2.Green) / 2);
   xRGB.Blue:= Round((RGB1.Blue+ RGB2.Blue) / 2);

   ...
end;
Grüßle!
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#16

Re: Farben kombinieren

  Alt 2. Jan 2007, 20:35
Zitat von Sunlight7:
So mach ich das immer, funkt bestens...

Delphi-Quellcode:
function SCombineColor(const Color1, Color2:DWord):DWord;
   var RGB1, RGB2, xRGB:TRGB;
begin
   ...

   xRGB.Red:= Round((RGB1.Red+ RGB2.Red) / 2);
   xRGB.Green:=Round((RGB1.Green+RGB2.Green) / 2);
   xRGB.Blue:= Round((RGB1.Blue+ RGB2.Blue) / 2);

   ...
end;
Ja, aber das erfüllt doch nie im Leben


Zitat von Alexander Roth:
Das soll solche bedingungen erfüllen:
weis+grün = weis (heller geht es ja schließlich nicht)
schwarz+grün=grün
schwarz+weis=weis
Wenn du hier weiß mit etwas wie grün oder schwarz kombinierst, wird etwas rauskommen, dass dunkler ist als weiß. Und bei schwarz und etwas anderem, nennen wir die Farbe X, wird nicht X sondern etwas dunkleres (X / 2) rauskommen. Ist also letztlich das gleiche Problem (die Gleiche Lösung) wie beim Vorschlag von Reinhard Kern (ausser ich überseh einfach etwas, dann hab ich nichts gesagt).
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#17

Re: Farben kombinieren

  Alt 2. Jan 2007, 20:45
Hmm, irgendwie hat mich der Thread verwirrt...
Sorry
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Farben kombinieren

  Alt 3. Jan 2007, 01:15
Die oben geforderten Bedingungen werden 1a durch bloßes addieren von r, g und b erfüllt. Folglich ist das bereits genannte Aufsplitten in die Farbkanäle, addieren dieser, beschneiden auf eine Range von 0-255, und rekombinieren mit rgb() genau das Vorgehen der Wahl.
Das Verhalten ist das von Lichtfarben, und diese verhalten sich absolut additiv. Nichts was ein bischen wie additiv wäre.
Das Verfahren, dass Reinhard beschreibt, würde die physiologisch am ehesten richtige Methode sein, um beim Alphablending zwei Farbwerte zu mischen. Die reine Mittelwertbildung ((R1+R2)/2)erfüllt den gleichen Zweck, ohne die Betrachtung von physiologischen Umständen. Also ein mathematisch korekter Alphablend zu je gleichen Anteilen (50% Deckung).
Alles nicht das richtige, um o.g. Vorgaben zu erreichen. Additive Farben schon
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#19

Re: Farben kombinieren

  Alt 3. Jan 2007, 02:07
Zitat von Der_Unwissende:

Gut, dann hast du schwarz und weiß, also $FFFFFF / 2, nicht ganz das was in Beitrag 1 gefordert war, oder übersehe ich nur etwas? Ich denke mal auf genau diese Frage, was jetzt genau in welchem Verhältnis gemischt werden soll, zielte die Frage von Khabarakh ab.
Hallo,

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.

Gruss Reinhard

Editiert:
Nachtrag zur Frage direkt: der Fragesteller hat gefordert Schwarz + Weiss -> Weiss, mein Ergebnis ist Schwarz + Weiss -> mittleres Grau. Die Realität spricht für die 2. Lösung, nimm einen Malkasten.
  Mit Zitat antworten Zitat
Benutzerbild von Alien426
Alien426

Registriert seit: 21. Dez 2005
146 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Farben kombinieren

  Alt 3. Jan 2007, 10:16
Zitat von Sunlight7:
So mach ich das immer, funkt bestens...
xRGB.Red:= Round((RGB1.Red+ RGB2.Red) / 2);
Mit
xRGB.Red := (RGB1.Red + RGB2.Red) div 2; kannst du dir aber das Runden sparen. Ausser natürlich es soll auch aufgerundet werden, was aber sicher keinen visuell sichtbaren Unterschied macht.

Ich denke Alexander hat doch unmissverständlich gesagt, dass er eine Additive Farbsynthese möchte. In dem Fall würde das vorher geschriebene nicht mehr gelten, weil es ja auch in mehereren Fällen nicht möglich ist.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
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