[JAVA] Conversion de la température de couleur en RVB (sRGB)

Je l'ai écrit à mi-chemin, mais le tableau HTML ne fonctionne pas bien, alors consultez le blog Hatena pour plus de détails. [Addition] Je l'ai écrit! Cet article. → Conversion de la température de couleur en RVB (sRGB) (version terminée)

Que faites-vous?

Avez-vous déjà vu ça? Implémentez le code pour trouver la valeur sRGB correspondant à la température de couleur.

daylight.png

Aperçu du traitement

  1. Vérification de la plage de température de couleur
  2. Température de couleur → coordonnées de chromaticité xy
  3. xyz → sRGB linéaire
  4. Standardiser sRGB linéaire
  5. sRGB linéaire → sRGB non linéaire
  6. Quantifier le sRGB non linéaire (entier de 0 à 255)
  7. sRGB quantifié → 0xAARRGGBB

Code ainsi que Java

Parce que vous aussi (en abrégé ci-dessous)

	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;
		
//La partie commentée ci-dessus omet la branche dans cette situation
//Vous pouvez faire ce qui suit
		
		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

Conversion de la température de couleur en RVB (sRGB)
[Rails] Comment convertir ERB en Haml
Convertir l'heure UTC Java en heure JST
Conversion du pointeur de chaîne de langage C en type Swift String
J'ai résumé le développement Android, RVB, nombre hexadécimal, implémentation des couleurs à partir du fichier de ressources
Lancez Docker à partir de Java pour convertir des documents Office en PDF
Convertir l'énumération Java et JSON vers et depuis Jackson
Développement Android, réglage de la luminosité de la couleur RVB au HSV,
[Recrutement urgent] Impossible de convertir java.util.date en java.sql.date ...
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Migrer de JUnit 4 vers JUnit 5
De Java à Ruby !!