CMYK in RGB und umgekehrt

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
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?
 

Bleiglanz

Gesperrter Benutzer
vorsicht, das ist nicht ganz trivial...

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



Code:
 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

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

The_S

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

Code:
	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;
	}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben