# CMYK in RGB und umgekehrt



## The_S (27. Sep 2005)

Hi,

bin seit etwa 2 Stunden am verzweifeln. Ich versuche CMYK in RGB umzurechnen und umgekehrt. Aber es will einfach nicht klappen, bei Google findet man dann auch net wirklich hilfreiches ... Kennt dafür jemand zufällig die Formel?


----------



## byte (27. Sep 2005)

hier is ein online converter: http://www.forret.com/tools/color.asp

vielleicht sind da ja auch irgendwo formeln verlinkt. bin grad zu faul nachzugucken.


----------



## The_S (27. Sep 2005)

Ja, da war ich ca. die letzen 2 Stunden ...  . Trotzdem danke.


----------



## Bleiglanz (27. Sep 2005)

vorsicht, das ist nicht ganz trivial...

eine echtet 1-1-Umrechnung die immer richtig ist gibt es nicht...




```
CMYK to RGB:
 -----------
 red   = 255 - minimum(255,((cyan/255)    * (255 - black) + black))
 green = 255 - minimum(255,((magenta/255) * (255 - black) + black))
 blue  = 255 - minimum(255,((yellow/255)  * (255 - black) + black))


 RGB to CMYK:
 -----------
 cyan    = 255 - red
 magenta = 255 - green
 yellow  = 255 - blue
 black   = minimum(cyan, magenta, yellow)
 cyan    = ((cyan    - black) / (255 - black)) * 255
 magenta = ((magenta - black) / (255 - black)) * 255
 yellow  = ((yellow  - black) / (255 - black)) * 255
```


----------



## AlArenal (27. Sep 2005)

Richtig, RGB und CMYK sind nicht 1:1 umrechenbar. Das macht es mitunter richtig lustig Sachen zum Drucker zu bringen..


----------



## The_S (27. Sep 2005)

Danke, werd es morgen mal ausprobieren (ach du schöner Feierabend :wink: )


----------



## The_S (28. Sep 2005)

Hab mir jetzt zwei Methoden gebastelt, aber irgendwie will das nicht so ganz funktionieren. Ich finde den Fehler einfach net ...  


```
public float[] RGBinCMYK(int red, int green, int blue) {
		
		float[] cmyk = new float[4];
		cmyk[0] = 255 - red;
		cmyk[1] = 255 - green;
		cmyk[2] = 255 - blue;
		cmyk[3] = ((cmyk[0] <= cmyk[1] && cmyk[0] <= cmyk[2]) ? cmyk[0] : ((cmyk[1] < cmyk[2]) ? cmyk[1] : cmyk[2]));
		for (int i = cmyk.length - 2; i > -1; i--) {
			cmyk[i] = ((cmyk[i] - cmyk[3]) / (255 - cmyk[3])) * 255;
		}
		return cmyk;
	}
	
	public int[] CMYKinRGB(float cyan, float magenta, float yellow, float key) {
		
		int[] rgb = new int[3];
		float[] cmyk = {cyan, magenta, yellow, key};
		float temp = 0;
		for (int i = rgb.length - 1; i > -1; i--) {
			temp = (cmyk[i] / 255) * (255 - cmyk[3]) + cmyk[3];
			rgb[i] = (int)(float)(255 - ((255 < temp) ? 255 : temp));
		}
		return rgb;
	}
```


----------

