Francisco Durdin Garcia - 1 year ago 99

Android Question

Im trying to set a custom value for the White Balance & temperature color in my camera app. Im using camera2 API and Im trying different ways to set this value. I found a method from a excel file to get the right RGB Temperature matrix [Red,Green,Blue] from the White Balance Value between 100 and 100.000.

I attached this method to a Seekbar and its working fine, my problem appear when I try to focus something white, then it becomes pink. Any kind of light looks like a pink torch in the screen.

Im setting the values in this way:

`mPreviewRequestBuilder.set(CaptureRequest.COLOR_CORRECTION_MODE, CaptureRequest.COLOR_CORRECTION_MODE_TRANSFORM_MATRIX);`

RggbChannelVector rggb = getTemperatureVector(seekBackSelectedTemperature);

mPreviewRequestBuilder.set(CaptureRequest.COLOR_CORRECTION_GAINS, myRggbChannelVector);

In other way, my method to get the matrix is this one:

`public static RggbChannelVector getTemperatureVector (int WhiteBalanceValue){`

float InsertTemperature = WhiteBalanceValue;

float temperature = InsertTemperature / 100;

float red;

float green;

float blue;

//Calculate red

if (temperature <= 66)

red = 255;

else {

red = temperature - 60;

red = (float) (329.698727446 * (Math.pow((double) red, -0.1332047592)));

if (red < 0)

red = 0;

if (red > 255)

red = 255;

}

//Calculate green

if (temperature <= 66) {

green = temperature;

green = (float) (99.4708025861 * Math.log(green) - 161.1195681661);

if (green < 0)

green = 0;

if (green > 255)

green = 255;

} else

green = temperature - 60;

green = (float) (288.1221695283 * (Math.pow((double) red, -0.0755148492)));

if (green < 0)

green = 0;

if (green > 255)

green = 255;

//calculate blue

if (temperature >= 66)

blue = 255;

else if (temperature <= 19)

blue = 0;

else {

blue = temperature - 10;

blue = (float) (138.5177312231 * Math.log(blue) - 305.0447927307);

if (blue < 0)

blue = 0;

if (blue > 255)

blue = 255;

}

RggbChannelVector finalTemperatureValue = new RggbChannelVector(red/255,(green/255)/2,(green/255)/2,blue/255);

return finalTemperatureValue;

}

Maybe its cause the method of my CaptureRequest is not correct, but I dont find the way to fix it. Hope that someone have some idea about it!

Thank you very much in advance.

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

It worked after change the template to Still_capture or Manual Template and use the next method:

```
captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_OFF);
// adjust color correction using seekbar's params
captureBuilder.set(CaptureRequest.COLOR_CORRECTION_MODE, CaptureRequest.COLOR_CORRECTION_MODE_TRANSFORM_MATRIX);
captureBuilder.set(CaptureRequest.COLOR_CORRECTION_GAINS, CameraCapabilities.colorTemperature(Integer.parseInt(awbMode)));
public static RggbChannelVector colorTemperature(int whiteBalance) {
float temperature = whiteBalance / 100;
float red;
float green;
float blue;
//Calculate red
if (temperature <= 66)
red = 255;
else {
red = temperature - 60;
red = (float) (329.698727446 * (Math.pow((double) red, -0.1332047592)));
if (red < 0)
red = 0;
if (red > 255)
red = 255;
}
//Calculate green
if (temperature <= 66) {
green = temperature;
green = (float) (99.4708025861 * Math.log(green) - 161.1195681661);
if (green < 0)
green = 0;
if (green > 255)
green = 255;
} else {
green = temperature - 60;
green = (float) (288.1221695283 * (Math.pow((double) green, -0.0755148492)));
if (green < 0)
green = 0;
if (green > 255)
green = 255;
}
//calculate blue
if (temperature >= 66)
blue = 255;
else if (temperature <= 19)
blue = 0;
else {
blue = temperature - 10;
blue = (float) (138.5177312231 * Math.log(blue) - 305.0447927307);
if (blue < 0)
blue = 0;
if (blue > 255)
blue = 255;
}
Log.v(TAG, "red=" + red + ", green=" + green + ", blue=" + blue);
return new RggbChannelVector((red / 255) * 2, (green / 255), (green / 255), (blue / 255) * 2);
}
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**