temperatura saturacion puso pone para pantalla negativo los como colores color celular cambiar aumentar arreglar android colors android-camera android-camera2

android - saturacion - Cómo obtener la temperatura de color a partir de la ganancia de corrección de color



la pantalla de mi celular se pone de colores (1)

Como mencionaste sobre el método proporcionado por Apple para lograrlo.

Estoy empezando con la documentación de Apple sobre el método

De la documentación de Apple

La documentación de Apple con respecto a temperatureAndTintValues es la siguiente

Convierte valores de ganancia RGB de balance de blancos específicos del dispositivo a valores de temperatura y tinte independientes del dispositivo.

Referencia: Documentación de Apple

La misma funcionalidad que podemos implementar en Android también siguiendo los métodos a continuación.

Descubra los componentes RGB en su posición

int x = (int)event.getX(); int y = (int)event.getY(); int pixel = bitmap.getPixel(x,y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel);

Temperatura de color correlacionada (CCT) que se mide en grados Kelvin (K) en una escala de 1,000 a 10,000.

La siguiente imagen muestra la relación entre CCT y algunos colores

Cálculo de la temperatura de color a partir del valor RGB

Según el mensaje SO La temperatura del color se puede calcular fácilmente con las siguientes fórmulas

1. Averigüe los valores de triestímulo CIE (XYZ) de la siguiente manera:

X=(−0.14282)(R)+(1.54924)(G)+(−0.95641)(B) Y=(−0.32466)(R)+(1.57837)(G)+(−0.73191)(B)=Illuminance Z=(−0.68202)(R)+(0.77073)(G)+(0.56332)(B)

2. Calcule los valores de cromaticidad normalizados:

x=X/(X+Y+Z) y=Y/(X+Y+Z)

3. Calcule el valor de CCT desde:

CCT=449n3+3525n2+6823.3n+5520.33 where n=(x−0.3320)/(0.1858−y)

Fórmula consolidada (CCT de RGB)

CCT=449n3+3525n2+6823.3n+5520.33 where n=((0.23881)R+(0.25499)G+(−0.58291)B)/((0.11109)R+(−0.85406)G+(0.52289)B)

Androide

Implementa la misma ecuación usando java.

Nota: papel de referencia

Cálculo de la temperatura del color y la iluminación con el sensor digital de color TAOS TCS3414CS

Implementaciones similares en otras plataformas

PHP - SO Post

Python - SO Post

Nota:

El problema con la conversión de RGB a temptation de color es que hay aproximadamente 16 millones de colores RGB, pero solo un subconjunto muy pequeño de esos colores en realidad corresponde a una temperatura de color.

Por ejemplo, un color verde no se corresponde con ninguna temperatura; es imposible debido a la forma en que el cerebro humano percibe la luz. Recordando que la demostración anterior es solo una aproximación, teóricamente sería posible buscar la temperatura asociada con un color dado, pero no funcionaría para la mayoría de los colores.

¿Por qué Green está excluido? Leer: ¿Por qué no hay estrellas moradas o verdes?

Muchas de las explicaciones provienen de otros sitios,

Espero que todo se ajuste a tu necesidad!

Estoy tratando de averiguar la temperatura de color de una foto capturada por la cámara.

final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { super.onCaptureStarted(session, request, timestamp, frameNumber); } @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); RggbChannelVector rggbChannelVector = result.get(CaptureResult.COLOR_CORRECTION_GAINS); getColorTemperature(rggbChannelVector); startCamera(); } }; private void getColorTemperature(RggbChannelVector rggbChannelVector) { //rggbChannelVector.getRed() = 2.192929 //rggbChannelVector.getGreenEven() = 1.0 //rggbChannelVector.getGreenOdd() = 1.0 //rggbChannelVector.getBlue() = 1.832323 }

iOS parece tener un método disponible para hacer esa temperaturaAndTintValues

Mientras busco algo similar (en Java o en cualquier otro idioma que pueda adoptar), casi todos estos métodos esperan un valor RGB con un rango de [0, 255] .

Hay pocos métodos para convertir XYZ a CCT (temperatura de color correlacionada) pero incluso para obtener el valor XYZ correcto, necesito valores RGB con en [0, 255]

Como puede ver, los valores de COLOR_CORRECTION_GAINS son >1 es decir, mayores que 255, lo cual no es inusual porque es una ganancia y iOS devuelve valores similares (mayores que 1).