| |
VB.NET - FortgeschritteneSubtraktive Farbmischung | | | Autor: Dilbert | Datum: 22.08.16 22:05 |
| Hi,
ich suche eine Funktion, die zwei Farben nach dem Schema der SUBTRAKTIVEN Farbmischung mischen kann.
Leider sind alle Funktionen vom Framework ausschließlich für die additive Farbmischung ausgelegt. Zum Beispiel die Funktion „LinearGradientBrush“.
Genau so einen Farbverlauf muss ich aber mit einer subtraktiven Farbmischung realisieren.
(Es geht um echte Druckfarben, die anteilig gemischt werden müssen. Zum Auswählen möchte ich einen Farbverlauf produzieren)
Ich hoffe, hier kennt sich jemand mit den Farbsystemen aus? Leider ist 90% des Internets voller falscher Informationen zu diesem Thema.
Zur Erklärung:
RGB Farben sind die Grundfarben der additiven Farbmischung (Selbstleuchtende Farben).
CMY für subtraktive Mischung (z.B. Druckfarben).
In der Theorie ist Schwarz nicht nötig, da je 100% C, M und Y Schwarz ergeben. In der Praxis wird für besonders dunkle Farben Schwarz zugemischt.
100% Cyan und 100% Yellow sollten gemischt und in RGB umgerechnet dann 100% Grün geben.
Genau da beginnt mein Problem:
Ich bekomme ein „Hellgrün“ statt „Sattgrün“
Was ich bisher habe:
Function MischMich(Farbe1 As Color, Farbe2 As Color, Optional AnteilFarbe1 _
As Double = 0.5) As Color
Dim AnteilFarbe2 As Double = 1 - AnteilFarbe1
'▼▼▼ Trennen in RGB-Variablen für einfachere
' Handhabung beim Experimentieren,
' etwas übertrieben nach Double, wird alles später optimiert ;-)
Dim R1 As Double = Farbe1.R
Dim G1 As Double = Farbe1.G
Dim B1 As Double = Farbe1.B
Dim R2 As Double = Farbe2.R
Dim G2 As Double = Farbe2.G
Dim B2 As Double = Farbe2.B
'▼▼▼ Umrechnen von RGB --> CMY:
' Vielleicht schon da ein Fehler?
' Ist das überhaupt nötig?
' Vielleicht geht die Addition auch direkt aus RGB?
Dim C1 As Double = 255 - R1
Dim M1 As Double = 255 - G1
Dim Y1 As Double = 255 - B1
Dim C2 As Double = 255 - R2
Dim M2 As Double = 255 - G2
Dim Y2 As Double = 255 - B2
'▼▼▼ Addition:
' Klappt bei dunklen Farben einigermaßen. Helle werden aber ZU hell.
Dim C3 As Double = C1 * AnteilFarbe1 + C2 * AnteilFarbe2
Dim M3 As Double = M1 * AnteilFarbe1 + M2 * AnteilFarbe2
Dim Y3 As Double = Y1 * AnteilFarbe1 + Y2 * AnteilFarbe2
'▼▼▼ Zurück nach RGB:
Dim R3 As Double = 255 - C3
Dim G3 As Double = 255 - M3
Dim B3 As Double = 255 - Y3
'▼▼▼ Und zurück als Farbe:
Return Color.FromArgb(R3, G3, B3)
End Function Zum bequemen Nachstellen ein Form mit 3 Panels, 1 Label und einem TrackBar bauen und diesen Code einfügen:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
' Mache ich sonst im Designer, für's Forum mal so:
TrackBar1.Maximum = 100
TrackBar1.TickFrequency = 10
TrackBar1.RightToLeft = Windows.Forms.RightToLeft.Yes
TrackBar1.Value = 50
Panel1.BackColor = Color.FromArgb(0, 255, 255)
Panel2.BackColor = Color.FromArgb(255, 255, 0)
Label1.Text = TrackBar1.Value & "% : " & 100 - TrackBar1.Value & "%"
End Sub
Private Sub Panels_Click(sender As Object, e As System.EventArgs) Handles _
Panel1.Click, Panel2.Click
ColorDialog1.Color = DirectCast(sender, Panel).BackColor
If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
DirectCast(sender, Panel).BackColor = ColorDialog1.Color
End If
End Sub
Private Sub Panels_BackColorChanged(sender As Object, e As _
System.EventArgs) Handles Panel1.BackColorChanged, Panel2.BackColorChanged
Panel3.BackColor = MischMich(Panel1.BackColor, Panel2.BackColor, _
TrackBar1.Value / 100)
End Sub
Private Sub TrackBar1_Scroll(sender As System.Object, e As _
System.EventArgs) Handles TrackBar1.Scroll
Panel3.BackColor = MischMich(Panel1.BackColor, Panel2.BackColor, _
TrackBar1.Value / 100)
Label1.Text = TrackBar1.Value & "% : " & 100 - TrackBar1.Value & "%"
End Sub In "Mittelstellung" der Trackbar ist das grün einfach zu hell.
Hat da jemand eine Idee?
Bye,
Dilbert
--
while (!asleep()) sheep++; | |
Re: Subtraktive Farbmischung | | | Autor: Manfred X | Datum: 22.08.16 22:55 |
| Hallo!
Probiere mal diese Umrechnungsformeln zwischen
den Farbräumen. Die cmyk-Werte liegen dabei zwischen 0 und 1.
''' <summary>Umrechnung von RGB in CMYK Farbraum</summary>
''' <param name="red">In: Red</param>
''' <param name="green">In: Green</param>
''' <param name="blue">In: Blue</param>
''' <param name="cyan">Out: Cyan</param>
''' <param name="magenta">Out: Magenta</param>
''' <param name="yellow">Out Yellow</param>
''' <param name="key">Out: Key</param>
Public Sub RGB2CMYK(ByVal red As Byte, green As Byte, blue As Byte, _
ByRef cyan As Double, ByRef magenta As Double, _
ByRef yellow As Double, ByRef key As Double)
'http://www.easyrgb.com/index.php?X=MATH&H=13#text13
cyan = 1 - (red / 255)
magenta = 1 - (green / 255)
yellow = 1 - (blue / 255)
key = 1.0
If cyan < key Then key = cyan
If magenta < key Then key = magenta
If yellow < key Then key = yellow
If (key = 1.0) Then
cyan = 0.0
magenta = 0.0
yellow = 0.0
Else
cyan = (cyan - key) / (1.0 - key)
magenta = (magenta - key) / (1.0 - key)
yellow = (yellow - key) / (1 - key)
End If
End Sub
''' <summary>Umrechnung von CMYK in RGB Farbraum</summary>
''' <param name="red">Out: Red</param>
''' <param name="green">Out: Green</param>
''' <param name="blue">Out: Blue</param>
''' <param name="cyan">In: Cyan</param>
''' <param name="magenta">In: Magenta</param>
''' <param name="yellow">In: Yellow</param>
''' <param name="key">In: Key</param>
Public Sub CMYK2RGB(ByVal cyan As Double, ByVal magenta As Double, _
ByVal yellow As Double, ByVal key As Double,
ByRef red As Byte, ByRef green As Byte, ByRef blue As _
Byte)
cyan = (cyan * (1.0 - key) + key)
magenta = (magenta * (1 - key) + key)
yellow = (yellow * (1.0 - key) + key)
red = CByte((1.0 - cyan) * 255)
green = CByte((1.0 - magenta) * 255)
blue = CByte((1.0 - yellow) * 255)
End Sub | |
Re: Subtraktive Farbmischung | | | Autor: Manfred X | Datum: 22.08.16 23:13 |
| Ich verstehe nicht viel von Farbmischung.
Für den Druck wird aber gewöhnlich das CMYK-Modell verwendet,
weil es dunkle Töne genauer wiedergibt.
Ob der Bildschirm (additive Mischung) die Farbe,
die das (subtraktive) Mischergebnis darstellt, korrekt wiedergeben
kann, weiß ich nicht. | |
Re: Subtraktive Farbmischung | | | Autor: Manfred X | Datum: 23.08.16 08:52 |
| Hallo!
Meiner Ansicht nach ist die Helligkeit der Farbdarstellung
eine Funktion des K-Wertes.
Für CMYK (1,0,1,0) ergibt sich RGB (0,255,0).
Diese Farbe wird als helles Grün am Monitor dargestellt.
Setzt man in der obigen Formel einen K-Wert von ca. 0.25
wird intern der Magenta-Anteil leicht erhöht und es ergibt sich
ein dunkleres (weniger gesättigtes) Grün (RGB: 0,191,0). | |
Re: Subtraktive Farbmischung | | | Autor: Dilbert | Datum: 23.08.16 18:14 |
| Hi.
Der "K"-Wert wird nur zur besseren "Sättigung" der Druckfarben verwendet, und sollte für die mathematische Farbmischung nicht zum Tragen kommen.
Es geht mir hier nur um die "Mathematik" dahinter.
Das "hübsche" Aussehen des fertigen Druckes ist noch nicht entscheidend. Im Moment will ich "nur" schnell 2 verschiedene Farben anteilig gemischt bekommen. Halt nicht additiv, das kann Windows ganz einfach, sondern subtraktiv, wie es halt für Druckfarben nötig ist.
OHNE K-Anteil. (Denn später wird es erstmal nur wieder am Bildschirm dargestellt, also gleich nach dem "subtrahieren" wieder in RGB zurück gerechnet.)
Vielleicht nochmal kurz was ich erreichen will:
Der Kunde wählt 2 Farben. Das sind KEINE selbstleuchtenden Farben wie am Monitor, sondern DRUCK-Farben.
Daher subtraktiv.
Diese sollen dann gemischt werden, und zwar in einstellbaren Anteilen.
Also in der Art: 25% Blau und 75% Hellrosa
(Später Pantone-Farben, die auf RGB - oder CMY - umgerechnet werden).
Am Bildschirm soll dann eine Anzeige des Resultates erfolgen. Ist sowieso nur an einem nicht farbkalibrierten Monitor, also sind feinste Details nicht entscheidend. Aber bei meinen bisherigen Versuchen lag ich oft 50% daneben, das ist nicht mehr OK.
Wenn 50% Orange mit 50% Orange gemischt werden, darf kein "Rot" raus kommen wie bei meinen Versuchen
Hat denn im Forum niemand etwas im Repro-Bereich gemacht?
Da sollte sowas doch Routine sein?!?
Dachte ich ... bis heute jedenfalls ...
Bye
--
while (!asleep()) sheep++; | |
Re: Subtraktive Farbmischung | | | Autor: Manfred X | Datum: 23.08.16 18:46 |
| Irgend so etwas vielleicht???
Public Class frmCMYK
Dim WithEvents cyan As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = 10, .Height = 20, .Width = 300, .TickStyle = TickStyle.None}
Dim WithEvents magenta As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = cyan.Top + 40, .Height = 20, .Width = 300, .TickStyle = _
TickStyle.None}
Dim WithEvents yellow As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = magenta.Top + 40, .Height = 20, .Width = 300, .TickStyle = _
TickStyle.None}
Dim WithEvents key As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = yellow.Top + 40, .Height = 20, .Width = 300, .TickStyle = _
TickStyle.None}
Dim WithEvents pb As New PictureBox _
With {.Parent = Me, .Top = key.Top + 40, .Width = 300, .Height = 200}
Dim WithEvents cyan2 As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = 10, .Height = 20, .Width = 300, .TickStyle = TickStyle.None, _
.Left = 320}
Dim WithEvents magenta2 As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = cyan.Top + 40, .Height = 20, .Width = 300, .TickStyle = _
TickStyle.None, _
.Left = 320}
Dim WithEvents yellow2 As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = magenta.Top + 40, .Height = 20, .Width = 300, .TickStyle = _
TickStyle.None, _
.Left = 320}
Dim WithEvents key2 As New TrackBar With _
{.Parent = Me, .Minimum = 0, .Maximum = 100, _
.Top = yellow.Top + 40, .Height = 20, .Width = 300, .TickStyle = _
TickStyle.None, _
.Left = 320}
Dim WithEvents pb2 As New PictureBox _
With {.Parent = Me, .Top = key.Top + 40, .Width = 300, .Height = 200, _
.Left = 320}
Dim lblMix As New Label With _
{.Parent = Me, .Top = pb.top + pb.height + 10, .Width = 120, _
.Text = "Mixfaktor Farbe1 (%):"}
Dim WithEvents txtMix As New TextBox With _
{.Parent = Me, .Top = pb.top + pb.height + 10, .Width = 100, .Left = _
130}
Dim WithEvents pbMix As New PictureBox With _
{.Parent = Me, .Top = txtMix.top + txtMix.height + 10, _
.Width = 600, .Height = 200}
Private Sub frmCMYK_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Width = 660
Me.Height = 700
End Sub
Private Sub cyan_ValueChanged(sender As Object, e As System.EventArgs) _
Handles cyan.ValueChanged, magenta.ValueChanged, _
yellow.ValueChanged, key.ValueChanged, _
cyan2.ValueChanged, magenta2.ValueChanged, _
yellow2.ValueChanged, key2.ValueChanged
pb.Invalidate()
pb2.Invalidate()
pbmix.invalidate()
End Sub
Private Sub pb_Paint(sender As Object, _
e As System.Windows.Forms.PaintEventArgs) Handles pb.Paint, pb2.Paint
Dim pb As PictureBox = DirectCast(sender, PictureBox)
Dim r, g, b As Byte
If pb.Left = 0 Then
CMYK2RGB(cyan.Value / 100, magenta.Value / 100, _
yellow.Value / 100, key.Value / 100, _
r, g, b)
e.Graphics.Clear(Color.FromArgb(r, g, b))
Else
CMYK2RGB(cyan2.Value / 100, magenta2.Value / 100, _
yellow2.Value / 100, key2.Value / 100, _
r, g, b)
e.Graphics.Clear(Color.FromArgb(r, g, b))
End If
End Sub
Private Sub pbMix_Paint(sender As Object, _
e As System.Windows.Forms.PaintEventArgs) Handles pbMix.Paint
Dim mix As Double
If Not Double.TryParse(txtMix.Text, mix) OrElse (mix < 0 Or mix > _
100) Then
e.Graphics.Clear(Me.BackColor)
Else
Dim r, g, b As Byte
Dim c As Double = _
(mix * cyan.Value) / 10000 + (1 - mix / 100) * cyan2.Value / 100
Dim m As Double = _
(mix * magenta.Value) / 10000 + (1 - mix / 100) * magenta2.Value / _
100
Dim y As Double = _
(mix * yellow.Value) / 10000 + (1 - mix / 100) * yellow2.Value / 100
Dim k As Double = _
(mix * key.Value) / 10000 + (1 - mix / 100) * key2.Value / 100
CMYK2RGB(c, m, y, k, r, g, b)
e.Graphics.Clear(Color.FromArgb(r, g, b))
End If
End Sub
Private Sub txtMix_KeyDown(sender As Object, _
e As System.Windows.Forms.KeyEventArgs) Handles txtMix.KeyDown
If e.KeyCode = Keys.Return Then pbMix.Invalidate()
End Sub
End Class | |
Re: Subtraktive Farbmischung | | | Autor: Dilbert | Datum: 23.08.16 19:41 |
| Hi,
klingt vielversprechend, aber hier ruft ständig ein Bier nach mir!
Und der Grill glüht auch schon!
Ich werd's aber gleich morgen - wenn der Restalkohol verdampft ist - testen!
Bye,
Volker
--
while (!asleep()) sheep++; | |
Re: Subtraktive Farbmischung | | | Autor: Manfred X | Datum: 23.08.16 19:47 |
| Vorsicht!
Biere mischen sich additiv! | |
CMY-Farbmischung - RGB-Farbmischung - CMY nach RGB - RGB nach CMY | | | Autor: visualfx | Datum: 26.08.16 19:47 |
| Hallo Dillbert,
ich glaube Du machst da einen grundsätzlichen Denkfehler!
Siehe zunächst einmal hier:
- CMY-Farbmischung: http://t1.gstatic.com/images?q=tbn:ANd9GcTaZPbyZUpv8_9jNDXhKCFKll9Q7rvMGaaO_bFp-ohAAUr1lzo2O26pOIs
- RGB-Farmischung: http://t3.gstatic.com/images?q=tbn:ANd9GcR2m84jqp1xp8yb29W-LlBNNTXtT1FXY60acSWnAhC6MvWQxohgXfleUzc
1) Hieraus folgen die jeweiligen Grundfarben:
C M Y R G B
----------- -----------
Cyan 255 0 0 0 255 255
Magenta 0 255 0 255 0 255
Yellow 0 0 255 255 255 0
Rot 0 255 255 255 0 0
Grün 255 0 255 0 255 0
Blau 255 255 0 0 0 255
Weiß 0 0 0 255 255 255
Scharz 255 255 255 0 0 0 2) Um 2 CMY-Farben zu mischen bzw. 2 RGB-Farben zu mischen gilt zunächst mal absolut das gleiche !!!
CMY:
C = (C1 + C2) / 2
M = (M1 + M2) / 2
Y = (Y1 + Y2) / 2
RGB:
R = (R1 + R2) / 2
G = (G1 + G2) / 2
B = (B1 + B2) / 2
Die Umwandlung von CMY nach RGB bzw. von RGB nach CMY werde ich gleich nachreichen
Gruß, Stefan
Beitrag wurde zuletzt am 26.08.16 um 20:02:46 editiert. | |
Update: CMY-Farbmischung - RGB-Farbmischung - CMY nach RGB - RGB nach CMY | | | Autor: visualfx | Datum: 26.08.16 22:10 |
| Hallo,
da es vorhin bei 32 °Grad im Schatten wohl etwas zu heiß fürs Hirn war, hier nochmal ab Punkt 2) !!!
2) Um 2 CMY-Farben zu mischen bzw. 2 RGB-Farben zu mischen gilt zunächst mal absolut das gleiche !!!
CMY:
C = MIN( 255, C1 + C2 )
M = MIN( 255, M1 + M2 )
Y = MIN( 255, Y1 + Y2 )
RGB:
R = MIN( 255, R1 + R2 )
G = MIN( 255, G1 + G2 )
B = MIN( 255, B1 + B2 )
3) CMY-Farbe nach RGB-Farbe
R = 255 - C
G = 255 - M
B = 255 - Y
4) RGB-Farbe nach CMY-Farbe
C = 255 - R
M = 255 - G
Y = 255 - B
- ich habe das ganze auch getestet:
RGB-Farbe1 = Cyan = 0 255 255
RGB-Farbe2 = Yellow = 255 255 0
dann beide Farben in CMY-Farben gewandelt
dann beide CMY-Farben gemischt
dann die CMY-Mischfarbe zurück in RGB-Farbe gewandelt
Ergebnis: RGB-Farbe = Grün = 0 255 0
- und noch ein zweiter Test:
RGB-Farbe1 = Grau = 127 127 127
RGB-Farbe2 = Grau = 127 127 127
dann beide Farben in CMY-Farben gewandelt
dann beide CMY-Farben gemischt
dann die CMY-Mischfarbe zurück in RGB-Farbe gewandelt
Ergebnis: RGB-Farbe = Schwarz = 0 0 0
- und: ich habe es auch noch für etliche weitere Kombinationen getestet, die haben auch alle funktioniert
Gruß, Stefan
Beitrag wurde zuletzt am 26.08.16 um 22:31:18 editiert. | |
Re: Subtraktive Farbmischung | | | Autor: Dilbert | Datum: 26.08.16 22:27 |
| Hey,
das mit dem "MIN" klingt plausibel!
Ich kann es erst morgen testen, aber wenn DAS klappt!
Das wäre ja ZU einfach!
Bye,
Dilbert
--
while (!asleep()) sheep++; | |
Re: Subtraktive Farbmischung | | | Autor: Dilbert | Datum: 26.08.16 22:49 |
| Hi nochmal:
Fehlschlag
Hab's gerade mal durchgespielt:
Wenn ich Grau und Grau mische, darf kein Schwarz raus kommen, sondern immer noch Grau...
(Ein Kunde kauft zwei Dosen Grau und will diese 50:50 gemischt bekommen. Das gibt kein Schwarz!)
Und bei deiner Rechnung:
C = MIN( 255, C1 + C2 )
M = MIN( 255, M1 + M2 )
Y = MIN( 255, Y1 + Y2 )
würde bei
RGB-Farbe1 = Cyan = 0 255 255
RGB-Farbe2 = Yellow = 255 255 0
Das raus kommen:
C1+C2=255, Min von 255 und 255 = 255
M1+M2=510, Min von 255 und 510 = 255
Y1+Y2=255, Min von 255 und 255 = 255
RGB-Farbe: NICHT Grün = 255 255 255
Und jetzt hätte ich dir beinahe ein Bier zum Abkühlen ausgegeben!
Verdammt, ich hatte echt schon Hoffnung dass es klappen könnte!
Schaaaade!
Bye,
Dilbert
--
while (!asleep()) sheep++; | |
Re: Subtraktive Farbmischung | | | Autor: visualfx | Datum: 26.08.16 23:05 |
| Hallo Dilbert,
- bei Deinem Beispiel
RGB-Farbe1 = Cyan = 0 255 255
RGB-Farbe2 = Yellow = 255 255 0
Das raus kommen:
C1+C2=255, Min von 255 und 255 = 255
M1+M2=510, Min von 255 und 510 = 255
Y1+Y2=255, Min von 255 und 255 = 255
RGB-Farbe: NICHT Grün = 255 255 255
hast Du RGB-Cyan mit RGB-Yellow gemischt!
Da kommt dann RGB-Weiß raus (das ist korrekt) !!!
- du mußt RGB-Cyan zuerst nach CMY-Cyan wandeln und RGB-Yellow nach CMY-Yellow wandeln, dann mischen und dann zurück nach RGB wandeln!
Da kommt dann RGB-Grün raus !!!
Gruß, Stefan | |
=== Nachtrag === | | | Autor: visualfx | Datum: 27.08.16 00:24 |
| Hallo Dilbert
1) Angenommen wir haben 2 x ein Mittelgrau, also jeweils: RGB = 127,5 127,5 127,5 - oder was exakt dasselbe ist, jeweils: CMY = 127,5 127,5 127,5 (muß jetzt leider mal auf 0,5 genau sein)
- additive Farbmischung ergibt RGB = 255 255 255 = weiß (die Helligkeitswerte addieren sich)
- subtraktive Farmischung ergibt CMY = 255 255 255 = schwarz (die "Dunkelheitswerte" addieren sich)
D. h. das Mischen von 2 mittelgrauen Farbeimern ist weder additive Farmischung noch subtraktive Farmischung !!!
Additive bzw. subtraktive Farbmischung bedeutet
(siehe auch nochmal die beiden Links:
- CMY-Farbmischung: http://t1.gstatic.com/images?q=tbn:ANd9GcTaZPbyZUpv8_9jNDXhKCFKll9Q7rvMGaaO_bFp-ohAAUr1lzo2O26pOIs
- RGB-Farmischung: http://t3.gstatic.com/images?q=tbn:ANd9GcR2m84jqp1xp8yb29W-LlBNNTXtT1FXY60acSWnAhC6MvWQxohgXfleUzc
)
daß die selbe Stelle / die selbe Fläche / die selbe Überlappung / die selben Pixel / ja selbst der einzelne Pixel additiv (die Helligkeitswerte addieren sich) bzw. subtraktiv (die "Dunkelheitswerte" addieren sich) gemischt wird !!!
2) Wenn Du aber das Mischen von Farbeimern berechnen willst, dann mußt Du folgendermaßen vorgehen:
Menge1 * R1 + Menge2 * R2 + Menge3 * R3 + ... + MengeX * RX
R = -------------------------------------------------------------
Menge1 + Menge2 + Menge3 + ... + MengeX
G = entsprechend
B = entsprechend oder auch so (weils bei Farbeimern wirklich wurscht ist):
Menge1 * C1 + Menge2 * C2 + Menge3 * C3 + ... + MengeX * CX
C = -------------------------------------------------------------
Menge1 + Menge2 + Menge3 + ... + MengeX
M = entsprechend
Y = entsprechend Gruß, Stefan
Beitrag wurde zuletzt am 27.08.16 um 00:27:46 editiert. | |
Wikipedia: Subtraktive Farmischung !!! | | | Autor: visualfx | Datum: 27.08.16 11:04 |
| Hallo Dilbert,
Ich glaube Du hast Recht, das ist alles noch nicht so ganz der Weisheits letzter Schluß !
Aber: in der Wikipedia steht ein Artikel zur Subtraktiven Farbmischung.
- Aussage:
bei der subtraktiven Farbmischung wird die Komplementär-Farbe herausgefiltert (subtrahiert), die restlichen Farben werden vom Auge per RGB gesehen und im Gehirn zur wahrgenommen Farbe zusammengemischt.
Beispiel 1:
Cyan-farbiger Farbfilter
Cyan = 255 0 0 => Komplementärfarbe 0 255 255 = Rot => Rot wird herausgefiltert /absorbiert
Das Auge sieht nur noch Grün und Blau => 0 255 255 = Cyan
Beispiel 2 (steht genauso in Wikipedia):
Gelber Farbfilter
Yellow = 0 0 255 => Komplementärfarbe 255 255 0 = Blau => Blau wird herausgefiltert / absorbiert
Das Auge sieht nur noch Rot und Grün => 255 255 0 = Yellow
Und ab jetzt wirds interessant !!!
Beispiel 3 (steht genau so in Wikipedia)
Ein Cyan-farbiger Farbfilter und ein gelber Farbfilter hintereinander !
Der Cyan-farbige Farbfilter absorbiert Rot
Der gelbe Farbfilter absorbiert Blau
Das Auge sieht nur noch Grün => 0 255 0 = Grün
Beispiel 4 (steht genau so in Wikipedia)
Ein Cyan-farbiger Farbfilter + ein gelber Farbfilter + ein Magenta-farbiger Farbfilter hintereinander !
Der Cyan-farbige Farbfilter absorbiert Rot
Der gelbe Farbfilter absorbiert Blau
Der Magenta-farbige Farbfilter absorbiert Grün
Das Auge sieht gar nichts mehr => 0 0 0 = Schwarz
Jetzt müssen wir das ganze nur noch in ein paar Formeln gießen und sind fertig (ne, ne, war nur Spaß!)
Gruß, Stefan | |
Re: Subtraktive Farbmischung | | | Autor: Dilbert | Datum: 27.08.16 14:27 |
| Jaaaa,
ich glaube ich weiss wo mein Denkfehler liegt!
Auch wenn ich's nur ungern zugebe, aber: du hast völlig recht!
Das ist WEDER additiv NOCH subtraktiv!
Subtraktiv bedeutet wenn man eine Folie mit 50% Grau hat, und eine weitere mit 50% grau darüber legt, wird es dunkler!
(bei Folien nicht SCHWARZ, sondern nur 75% Grau, aber es subtrahiert sich tatsächlich! Beim Druck wird der Fläche mit 50% Schwarz tatsächlich bei weiteren 50% die andere Hälfte "geschwärzt" bis 100% der Fläche schwarz sind...)
Habe ich aber eine Dose mit "Mittelgrau" und mische eine weitere mit "Mittelgrau" dazu, darf GARNIX passieren.
Genau DAS brauche ich!
Die Formel habe ich zwar noch nicht, aber ein paar Ideen.
Mal schauen, ob ich bei diesem Wetter und dann auch noch am Wochenende tatsächlich dazu komme das zu testen, aber eigentlich muss irgendwas mit dem FarbUNTERSCHIED dazu kommen.
Sowas wie: Erstmal den Abs-Wert der Differenz, und das zum Kleineren dazuaddieren.
Oder so...
Erstmal danke für die neue Sichtweise!
Bye,
Dilbert
--
while (!asleep()) sheep++; | |
Re: Subtraktive Farbmischung | | | Autor: visualfx | Datum: 27.08.16 15:25 |
| Hallo Dilbert,
wenn man es auchrechnet:
- CMY: Cyan 255 0 0 mit Yellow 0 0 255 gemischt 1:1 ergibt: 127,5 0 127,5
- RGB: Cyan 0 255 255 mit Yellow 255 255 0 gemischt 1:1 ergibt: 127,5 255 127,5
Das ist zweimal exakt das selbe Grün mit 50 % Grauaufhellung !!!
Und es ist kein reines Grün !!! also kein CMY 255 0 255 bzw. RGB 0 255 0 !!!
Gruß, Stefan | |
Re: Subtraktive Farbmischung | | | Autor: Kuno60 | Datum: 20.10.16 08:01 |
| Hallo,
deine Funktion ist richtig für die additive Farbmischung. Die Umrechnung in CMY ist dabei nicht erforderlich, sie liefert auch mit RGB die gleichen Ergebnisse. Die gleiche Berechnung verwendet auch die GDI+ zur Berechnung von Farbverläufen und Transparenzen.
Für die exakte subtraktive Farbmischung muss mit Farbmengen der Komponenten Weiß, Gelb, Zyan und Magenta gerechnet werden.
Zum Beispiel:
3 Liter Gelb + 3 Liter Zyan ergeben 6 Liter Grün (0,255,0)
Jetzt noch 3 Liter Magenta dazu und man bekommt 9 Liter Schwarz (0,0,0)
Fügt man noch 9 Liter Weiß hinzu hat man 18 Liter Grau (128,128,128)
2 Liter Weiß + 2 Liter Gelb + 2 Liter Magenta = 6 Liter Hellrot (255,85,85)
1 Liter Weiß + 2,5 Liter Gelb + 1 Liter Zyan + 1,5 Liter Magenta = 6 Liter Hellbraun (170,128,43)
Ist es das, was du suchst?
Solch eine Berechnung hatte ich Früher mal für ein VB6-Spiel (Farbenfabrik) entwickelt.
Vielleicht finde ich sie ja noch... | |
Re: Subtraktive Farbmischung | | | Autor: Dilbert | Datum: 20.10.16 17:37 |
| Hi,
Deine Aussage:
Zitat: | | 3 Liter Gelb + 3 Liter Zyan ergeben 6 Liter Grün (0,255,0)
Jetzt noch 3 Liter Magenta dazu und man bekommt 9 Liter Schwarz (0,0,0)
| |
stimmt nur dann, wenn man "perfekte" Farben verwendet.
Das bedeutet, die Farben müssen im Prinzip transparent sein.
Eigentlich genau wie die Farben beim Tintenstrahldrucker.
DORT gibt sowas dann tatsächlich schwarz.
Obwohl es selbst die Hersteller dieser Farben kaum schaffen, ein ordentliches Schwarz daraus zu mischen!
Daher wird immer noch als 4. Druckfarbe schwarz dazugemischt, um es satter zu bekommen.
Kaufst du jedoch eine Farbdose im nächsten Baumarkt, sind diese Farben leider nicht transparent. Dort ist immer ein üppiger Weissanteil dabei und die Mischung dieser Farben wird weder additiv noch subtraktiv.
Genaugenommen ist es eine ungenaue Mischung aus additiver Farbmischung und Mittelwertbildung.
Das habe ich jetzt schmerzhaft lernen müssen.
Inzwischen habe ich eine Funktion gebastelt, die das einigermaßen wiedergibt, aber doch viel zu ungenau für die Praxis bleibt.
Zu deutsch:
Projekt eingemottet...
Bye,
Dilbert
--
while (!asleep()) sheep++; | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|