Camera2 API Set Custom Баланс белого и цветовая температура

Я пытаюсь установить пользовательское значение для баланса белого и цветовой температуры в приложении камеры. Я использую camera2 API и пытаюсь установить это значение разными способами. Я нашел метод из файла Excel, чтобы получить правильную матрицу температуры RGB [красный, зеленый, синий] из значения баланса белого между 100 и 100.000.

Я прикрепил этот метод к Seekbar, и он работает нормально, моя проблема появляется, когда я пытаюсь сфокусировать что-то белое, затем оно становится розовым. Любой вид света выглядит как розовый факел на экране.

Я устанавливаю значения следующим образом:

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

RggbChannelVector rggb = getTemperatureVector(seekBackSelectedTemperature);

mPreviewRequestBuilder.set(CaptureRequest.COLOR_CORRECTION_GAINS, myRggbChannelVector);

Другими словами, мой метод получения матрицы такой:

 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;
}

Может быть, это потому, что метод моего CaptureRequest неверен, но я не могу найти способ это исправить.

Ответы на вопрос(2)

Ваш ответ на вопрос