vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Subtraktive Farbmischung 
Autor: Manfred X
Datum: 23.08.16 19:47

Vorsicht!

Biere mischen sich additiv!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Subtraktive 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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Subtraktive Farbmischung 
Autor: Dilbert
Datum: 22.08.16 23:03

Hi,

das rechnet in CMYK um, aber das verkompliziert die Sache nur noch. CMY ohne "K" sollte zum Mischen drastisch einfacher sein.
Wenn du aber die Mischung auch mit "K" hin bekommst, wäre ich sofort dabei

Bye

--
while (!asleep()) sheep++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Subtraktive Farbmischung 
Autor: Dilbert
Datum: 22.08.16 23:21

Hi,

ist auch ein vertracktes Thema.
Da haben in Physik glaub' ich alle geschwänzt
Aber es geht nicht um die korrekte Darstellung am Bildschirm, sondern um die mathematisch korrekte Berechnung. Die Farbanpassung für die "Drucksache" wird später an anderer Stelle gemacht (und ist für den Bildschirm auch im Moment noch völlig nebensächlich).

Jedes billige Malprogramm kann das, jeder doofe Tintenstrahldrucker rechnet es korrekt um, aber die "Mischung" bekomm' ich nicht hin. Das kann doch nicht so schwer sein?!?

Hiiilfeee,

Dilbert

--
while (!asleep()) sheep++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Subtraktive Farbmischung 
Autor: Dilbert
Datum: 24.08.16 20:13

ROTFL,

ja, Bier mischt sich additiv, das hab' ich gestern auch gelernt

Leider ist der Code von dir genau das, was ich als erstes gepostet habe, nur unter Berücksichtigung von "K". Versuche doch mal mit irgendeiner Stellung der Regler ein "sattes" grün zu mischen.
(wie es eigentlich bei 50:50 von 100% cyan und 100% yellow sein sollte)
Also das, was in Dotnet als "color.fromargb(0,255,0)" raus kommt...

Bye

--
while (!asleep()) sheep++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Subtraktive Farbmischung 
Autor: Dilbert
Datum: 26.08.16 17:02

Hallo,

hat also keiner hier im Forum eine Idee wie sowas geht?
Ich suche immer noch nach einer Lösung...

Schaade

Bye

--
while (!asleep()) sheep++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

=== 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Additive / Subtraktive / Mittelwert-Farbmischung 
Autor: visualfx
Datum: 27.08.16 15:04

Hallo Dilbert,

vielleicht hilft Dir ja dieses Bild und der zugehörige Text weiter !


- Bild: http://www.janthor.com/skizzenaux/desat2/farbmischungen.png

- Text: http://www.janthor.com/skizzen/index.php?/archives/266-Die-Rueckkehr-der-Rache-des-Sohnes-von-I-Can-Get-No-Saturation,-Teil-II-Angriff-der-Desperado-Farben-von-jenseits-des-Farbwuerfels.html


Das Bild und der zugehörige Text sind etwas weiter unten auf der Seite.


- 1te Mischung: Additiv wie bunte Lichtquellen

- 2te Mischung: Mittelwert wie deckende Buntlacke

- 3te Mischung: Subtraktiv wie bunte Filterfolien oder Wasserfarben


Ich würde behaupten, das leicht aufgehellte Grün von der Mittelwert-Farbmischung ist genau das Grün, welches Du ganz am Anfang von diesem Thread berechnet hast !!!

- denn Deine Berechnung ist eine Mittelwert-Mischung !

- so wie auch die Formeln von meinem Kommentar === Nachtrag ===

- den Mittelwert kannst Du mit CMY- Farben berechnen oder auch mit RGB-Farben, das ist grad egal !

Gruß, Stefan

Beitrag wurde zuletzt am 27.08.16 um 15:11:34 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Subtraktive Farbmischung 
Autor: Dilbert
Datum: 27.08.16 15:13

Hi,

ich kenn' mich mit additiver und subtraktiver Farbmischung wirklich gut aus!
Daher habe ich wohl den Fehler gemacht, zu denken es wäre subtraktive Farbmischung, wenn ich Lacke mische. Und mein erster Versuch (siehe erster Post) war dann wohl tatsächlich schon richtig.

Allerdings kommt mir die Mischung eines "satten" Cyan und eines satten Gelbs zu "Hellgrün" einfach noch zu hell vor.

Vielleicht täusche ich mich da aber wirklich, weil ich an subtraktiv gedacht habe...
Ich denke, ich werde das wohl mal wirklich testen müssen.
Auf zum Baumarkt...
(Ob die mich das vor Ort testen lassen? Und wenn nicht das Gemisch raus kommt was ich will, kann ich die Dosen dann zurück geben? )

Bye,

Dilbert

--
while (!asleep()) sheep++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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++;

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel