# CMYK Zeichen



## Lazybone (22. Nov 2007)

Hallo

ich habe 4 TextField für Cyan, Magenta, Yellow und Key. Wie kann ich diese nun so machen das ich die mit setColor() nutzen kann? Hab dazu leider nicht wirklich was gefunden.

Gruß
Lazybone


----------



## SlaterB (22. Nov 2007)

das in ein TextFeld ein String kommt und keine Color, ist dir schon klar, oder?

wenn es dir um die Umwandlung 'normaler Colors' und den CMYK-Farbraum geht,
hilft vielleicht

http://java.sun.com/javase/6/docs/api/java/awt/color/ColorSpace.html
http://www.velocityreviews.com/forums/t127265-rgb-to-cmyk.html


----------



## Lazybone (22. Nov 2007)

hmm also ich habe jetzt 4 Slider (Cyan,MAgenta,Yellow,Key) und einen Button zum mischen und ich lasse mit paint ein Rechteck mit der Mischfarbe zeichen mit RGB funtzt das schon ganz gut nur mit CMYK bekomme ich es nicht hin es kommen immer andere farben raus als die ich will. Hat vielleicht einer nen Beispiel?


----------



## SlaterB (23. Nov 2007)

hast du ein Beispiel, das nicht läuft?


----------



## The_S (23. Nov 2007)

Generell kann man CMYK nicht 100pro in RGB umwandeln, nur richtweiße. Ich hab dazu aber mal irgendwo was geschrieben gehabt. Bei Interesse such ichs mal raus.


----------



## Lazybone (25. Nov 2007)

@Hobbit_Im_Blutrausch

das wäre gut ich hab jetzt das ganze Wochenende versucht aber nichts brauchbares bekommen. Bzw gibt es sowas wie g.setColor(new Color(255,255,255)) (g Graphics Object) für CMYK?


----------



## The_S (26. Nov 2007)

Nein, sowas gibt es nicht. Du musst dann "umrechnen", wobei sowas wie gesagt nicht zu 100% geht. Ich guck mal, ob ich den Code noch finde ...

[edit] Und da hab ich ihn auch schon:


```
public class ColorRechner {
	
	private DecimalFormat df = new DecimalFormat("#");
	
	public String RGBinHEX(int red, int green, int blue) {
		
		String[] hex = new String[3];
		hex[0] = Integer.toHexString(red).toUpperCase();
		hex[1] = Integer.toHexString(green).toUpperCase();
		hex[2] = Integer.toHexString(blue).toUpperCase();
		for (int i = hex.length - 1; i > -1; i--) {
			hex[i] = ((hex[i].length() < 2) ? "0" + hex[i] : hex[i]);
		}
		return hex[0] + hex[1] + hex[2];
	}
	
	public float[] RGBinHSB(int red, int green, int blue) {
		
		float[] hsb = new float[3];
		hsb = Color.RGBtoHSB(red, green, blue, new float[3]);
		hsb[0] = hsb[0] * 360;
		hsb[1] = hsb[1] * 100;
		hsb[2] = hsb[2] * 100;
		return hsb;
	}
	
	public int[] HSBinRGB(float hue, float saturation, float brightness) {
		
		int[] rgb = new int[3];
		Color col = Color.getHSBColor(hue / 360, saturation / 100, brightness / 100);
		rgb[0] = col.getRed();
		rgb[1] = col.getGreen();
		rgb[2] = col.getBlue();
		return rgb;
	}
	
	public int[] HEXinRGB(String hex) {
		
		int[] rgb = new int[3];
		for (int i = 0; i < rgb.length; i++) {
			rgb[i] = Integer.parseInt(hex.substring(i * 2, i * 2 + 2), 16);
		}
		return rgb;
	}
	
	public String HSBinHEX(float hue, float saturation, float brightness) {
		
		int[] rgb = HSBinRGB(hue, saturation, brightness);
		return RGBinHEX(rgb[0], rgb[1], rgb[2]);
	}
	
	public float[] HEXinHSB(String hex) {
		
		int[] rgb = HEXinRGB(hex);
		return RGBinHSB(rgb[0], rgb[1], rgb[2]);
	}
	
	public float[] RGBinCMYK(int red, int green, int blue) {
		
		float[] rgb = {red, green, blue};
		float[] cmyk = new float[4];
		float highest = ((red >= green && red >= blue) ? red : ((green > blue) ? green : blue));
		cmyk[3] = 1 - highest / 255;
		for (int i = rgb.length - 1; i > -1; i--) {
			if (rgb[i] == highest) {
				cmyk[i] = 0;
			}
			else {
				cmyk[i] = 1 - rgb[i] / highest;
			}
		}
		return cmyk;
	}
	
	public int[] CMYKinRGB(float cyan, float magenta, float yellow, float key) {
		
		int[] rgb = new int[3];
		float[] cmyk = {cyan, magenta, yellow, key};
		for (int i = rgb.length - 1; i > -1; i--) {
			rgb[i] = Integer.parseInt(df.format((float)(((cmyk[i] == 0) ? (1 - cmyk[3]) * 255 : (1 - cmyk[3]) * 255) * (1 - cmyk[i]))));
		}
		return rgb;
	}
	
	public float[] HEXinCMYK(String hex) {
		
		int[] rgb = HEXinRGB(hex);
		return RGBinCMYK(rgb[0], rgb[1], rgb[2]);
	}
	
	public float[] HSBinCMYK(float hue, float saturation, float brightness) {
		
		int[] rgb = HSBinRGB(hue, saturation, brightness);
		return RGBinCMYK(rgb[0], rgb[1], rgb[2]);
	}
	
	public float[] CMYKinHSB(float cyan, float magenta, float yellow, float key) {
		
		int[] rgb = CMYKinRGB(cyan, magenta, yellow, key);
		return RGBinHSB(rgb[0], rgb[1], rgb[2]);
	}
	
	public String CMYKinHEX(float cyan, float magenta, float yellow, float key) {
		
		int[] rgb = CMYKinRGB(cyan, magenta, yellow, key);
		return RGBinHEX(rgb[0], rgb[1], rgb[2]);
	}
}
```


----------



## Guest (26. Nov 2007)

@Hobbit_Im_Blutrausch

Danke. In was müssen die CMYK Werte angegeben werden? Man sieht ja 0.000 - 1.000 oder 0 - 100


----------



## The_S (26. Nov 2007)

weißt du wie alt der Code ist? Das weiß ich doch jetzt nicht mehr ... Wandle doch einfach mal RGBinCMYK um, dann siehst du ja, ob du 0 Komma Werte, oder Werte zwischen 0 und 100 zurückbekommst.


----------



## Guest (26. Nov 2007)

kannst du mir auch bitte die DecimalFormat Klasse geben da die ja bei CMYKinRGB genutzt wird


----------



## The_S (26. Nov 2007)

nö


----------



## Lazybone (26. Nov 2007)

dann nur die funktion die genutzt wird bzw sagste mir was diese macht


----------



## The_S (27. Nov 2007)

Die Klasse brauch ich dir nicht zu geben, genausowenig wie die Funktion. Das ist ne ganz normale Standardklasse im JDK. Die brauchst du nur zu importieren :roll:


----------

