CMYK Werte visuell ausgeben (01/2002, Dir 8)

In diesem Bereich befinden sich Artikel und Tutorials zum Thema Director.

Moderatoren: Bär, Admin

Antworten
Admin
Site Admin
Beiträge: 41344
Registriert: 07.02.2006, 2006 16:09
Wohnort: München
Kontaktdaten:

CMYK Werte visuell ausgeben (01/2002, Dir 8)

Beitrag von Admin » 11.02.2006, 2006 17:34

CMYK Werte visuell ausgeben

Nachdem es ja in der Bibliothekspalette fertige Behaviors für einen Malkasten gibt ist es ja ziemlich naheliegend das man CMYK Farben verwenden möchte. Man sollte schliesslich die Kreativität vom Bildschirm auch auf einen Drucker ausgeben können und der druckt eben nicht mit RGB sondern mit CYMK Farben (Cyan, Magenta, Yellow, Black).

Warum "K" für Black? Dazu gibt es zwei Meinungen: Die einen sagen das K für den letzten Buchstaben des Wortes >Black< steht und die andere Fraktion sagt das K für >KEY< steht. Gemeint wird hier das Black die Schlüsselfarbe ist weil erst mit Ihr das Druckbild komplett und anschaubar ist.

Egal ob K jetzt für Black oder Key steht wir stehen auf jedenfall vor dem Problem CMYK Werten in RGB Farben zu konvertieren. Das Ziel der Aufgabe ist es das der User über vier Eingabefelder die CMYK-Werte bestimmt und die Farbe anschliessend korrekt in einem gefüllten Sprite Rechteck visuell ausgegeben wird. Es müssen also 4 Farben (CMYK) auf 3 Farben reduziert werden und mit der Funktion rgb(rot,grün,blau) ausgegeben werden.

Als erstes werden die Werte über Felder eingegeben:

Code: Alles auswählen

cyan = member("cyan").text
magenta = member("magenta").text
yellow = member("yellow").text
black = member("black").text
dann geben wir die Werte in ein Array:

Code: Alles auswählen

cmyliste = [cyan,magenta,yellow,black]
die Inhalte der Liste werden mit 2.55 Multipliziert (oder man dividiert durch 100 und multipliziert mal 255) und man erhält bereits die richtigen Werte für RGB ohne die Black zu berücksichtigen. (zb. wenn Cyan = 50% und man wendet diese Rechnung an, dann erhält man 127.5 ROT - was ja stimmt weil 127.5 die Hälfte der Skala von 0-255 ist.)

Code: Alles auswählen

cyan = cmyliste[ 1] * 2.55
magenta = cmyliste[ 2] * 2.55
yellow = cmyliste[ 3] * 2.55
black = cmyliste[ 4] * 2.55
jetzt muss natürlich noch die Farbe Schwarz mit einberechnet werden und dazu kommt folgende Formel zur Anwendung:

Code: Alles auswählen

rot = ( 255 - ( cyan + black ) )
grün = ( 255 - ( magenta + black ) ) 
blau = ( 255 - ( yellow + black ) ) 
dies ist natürlich eine "Quick & Dirty" Umrechnung und die Farben werden nicht "druckecht" am Bildschirm angezeigt, aber nachdem es ja in Director (noch) keine "cmyk(cyan,magenta,yellow,black)" Funktion gibt und zb. der Malkasten kein CMYK Behavor enthält kann man auf die schnelle schon auf diese paar Zeilen Code zurückgreifen.

Am Schluss noch die Ausgabe in einem Sprite-Rechteck:

Code: Alles auswählen

sprite(x).color = rgb(rot,grün,blau)
Die Werte für CMYK können auch zb. von vier Schiebebalken (Slidern) kommen. Wichtig ist hierbei natürlich nur das die Slider Zahlen von 0-100 liefern.

Hier noch das gesamte Script:

Code: Alles auswählen

on exitframe me

  cyan = member("cyan").text
  magenta = member("magenta").text
  yellow = member("yellow").text
  black = member("black").text

  cmyliste = [cyan,magenta,yellow,black]

  cyan = cmyliste[ 1] * 2.55
  magenta = cmyliste[ 2] * 2.55
  yellow = cmyliste[ 3] * 2.55
  black = cmyliste[ 4] * 2.55

  rot = ( 255 - ( cyan + black ) )
  grün = ( 255 - ( magenta + black ) ) 
  blau = ( 255 - ( yellow + black ) ) 

  sprite(1).color = rgb(rot,grün,blau)

end exitFrame

RGB Farben zu CMYK konvertieren

Was in die eine Richtung geht (CMYK -> RGB) geht auch in die andere Richtung und deshalb erkläre ich hier die Umrechnung von RGB Werten in CMYK.
Die Hauptfrage die uns hier beschäftigt ist wie man aus RGB Werten eine 4. Farbe nämlich Schwarz erzeugt und wie sich diese Farbe verhalten sollte (UCR,GCR).

Aber mal von vorne: die RGB Werte kann man zb. wieder über drei Felddarsteller einlesen

Code: Alles auswählen

rot = member("rot").text
grün = member("grün").text
blau = member("blau").text
anschliessend geht man mit der Funktion float() sicher das die Eingaben auch Flieskomma-Format haben und gibt Ihnen neue Variablen:

Code: Alles auswählen

R = float(rot)
G = float(grün)
B = float(blau)
indem man den R,G oder B Wert mit 255 dividiert bekommt man dem C,M oder Y Wert jedoch unter null dh. 50% sind 0.5. Die nächste Formel ist dann für die Details zuständig und gibt die richtigen Werte für CMY wieder:

Code: Alles auswählen

redValue = R/255
greenValue = G/255
blueValue = B/255

cyanValue = 100*(1-redvalue)
magentavalue = 100*(1-greenValue)
yellowvalue = 100*(1-blueValue)
jetzt packen wir die fertigen CMY Werte in eine Liste und generieren die schwarze Farbe folgendermassen: Der kleinste Wert der CMY Liste ist sozusagen Schwarz. Indem man diesen Wert mit zb. 0.6 multipliziert kann man ungefähr das UCR regeln. Dann wird die Variable "K" noch der Liste hinten angefügt.

Code: Alles auswählen

cmyliste = [cyanvalue,magentavalue,yellowvalue]
K = 0.6*min(cmyliste)
cmyliste.add(K) 
put cmyliste
Auch das ist natürlich nur eine "Grob-Lösung" bzw. nur ein Lösungsansatz für diese Problematik weil ja die UCR bzw. GCR Berechnungen nich wirklich berücksichtigt sind.

Hier noch das ganze Script zum rauskopieren :-)

Code: Alles auswählen

on exitframe me

  rot = member("rot").text
  grün = member("grün").text
  blau = member("blau").text

  R = float(rot)
  G = float(grün)
  B = float(blau)

  redValue = R/255
  greenValue = G/255
  blueValue = B/255

  cyanValue = 100*(1-redvalue)
  magentavalue = 100*(1-greenValue)
  yellowvalue = 100*(1-blueValue)

  cmyliste = [cyanvalue,magentavalue,yellowvalue]

  K = 0.6*min(cmyliste)

  cmyliste.add(K) 

  put cmyliste

end exitFrame

Autor: Bernhard Standl

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste