[JAVA] Konvertieren von Farbtemperatur in RGB (sRGB)

Ich habe es zur Hälfte geschrieben, aber die HTML-Tabelle funktioniert nicht gut. Weitere Informationen finden Sie im Hatena-Blog. [Ergänzung] Ich habe es geschrieben! Dieser Beitrag. → Von Farbtemperatur in RGB (sRGB) konvertieren (fertige Version)

Was machst du?

Hast du das jemals gesehen? Implementieren Sie den Code, um den sRGB-Wert zu ermitteln, der der Farbtemperatur entspricht.

daylight.png

Überblick über die Verarbeitung

  1. Überprüfung des Farbtemperaturbereichs
  2. Farbtemperatur → xy-Chromatizitätskoordinaten
  3. xyz → lineares sRGB
  4. Standardisieren Sie lineares sRGB
  5. Lineares sRGB → Nichtlineares sRGB
  6. Quantifizieren Sie nichtlineares sRGB (Ganzzahl von 0 bis 255).
  7. Quantisiertes sRGB → 0xAARRGGBB

Code sowie Java

Weil du auch (unten abgekürzt)

	public static int daylight(double tcp) {
		double x, y, z, r, g, b;
		if (tcp < 4000.0) {
			throw new IllegalArgumentException();
		}
		else if (tcp <= 7000.0) {
			x = -4.6070E9 / (tcp * tcp * tcp) + 2.9678E6 / (tcp * tcp) + 0.09911E3 / tcp + 0.244063;
		}
		else if (tcp <= 25000.0) {
			x = -2.0064E9 / (tcp * tcp * tcp) + 1.9018E6 / (tcp * tcp) + 0.24748E3 / tcp + 0.237040;
		}
		else {
			throw new IllegalArgumentException();
		}
		y = -3.000 * (x * x) + 2.870 * x - 0.275;
		z = 1.0 - x - y;
		
		r = 3.2406 * x - 1.5372 * y - 0.4986 * z;
		g = -0.9689 * x + 1.8758 * y + 0.0415 * z;
		b = 0.0557 * x - 0.2040 * y + 1.0570 * z;
		
//		double maxRgb = Math.max(Math.max(r, g), b);
//		r /= maxRgb;
//		g /= maxRgb;
//		b /= maxRgb;
//		r = (r <= 0.0031308) ? 12.92 * r : 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055;
//		g = (g <= 0.0031308) ? 12.92 * g : 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055;
//		b = (b <= 0.0031308) ? 12.92 * b : 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055;
		
//Der auskommentierte Teil oben lässt den Zweig in dieser Situation weg
//Sie können Folgendes tun
		
		double maxRgb = Math.max(Math.max(r, g), b);		
		r = 1.055 * Math.pow(r / maxRgb, 1.0 / 2.4) - 0.055;
		g = 1.055 * Math.pow(g / maxRgb, 1.0 / 2.4) - 0.055;
		b = 1.055 * Math.pow(b / maxRgb, 1.0 / 2.4) - 0.055;
		
		int rr = (int) (255.0 * r + 0.5);
		int gg = (int) (255.0 * g + 0.5);
		int bb = (int) (255.0 * b + 0.5);
		return 0xFF000000 | (rr << 16) | (gg << 8) | bb;
	}

Recommended Posts

Konvertieren von Farbtemperatur in RGB (sRGB)
[Rails] Wie man von erb zu haml konvertiert
Konvertieren Sie von der Java-UTC-Zeit in die JST-Zeit
Konvertiert vom String-Zeiger der C-Sprache zum Swift-String-Typ
Ich habe die Android-Entwicklung, RGB, Hexadezimalzahl und Farbimplementierung aus der Ressourcendatei zusammengefasst
Starten Sie Docker von Java aus, um Office-Dokumente in PDF zu konvertieren
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
Android-Entwicklung, Helligkeitsanpassung von RGB-Farbe auf HSV,
[Dringende Rekrutierung] Kann nicht von java.util.date nach java.sql.date konvertieren ...
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Migrieren Sie von JUnit 4 zu JUnit 5
Von Java zu Ruby !!