# WB to Temp and Tint

Hi.
I know, this question was asked more than once, but I still have not been able to find a solution.
I want to translate the white balance coefficients into Temperature and Tint, as for example, this is done in FastRawViewer.
For this, I used dng_temperature from the DNG SDK (about the error with the typing I know).
I receive rgb_cam from cam_xyz with cam_xyz_coeff for my camera. The rgb_cam now stores the matrix from the camera to sRGB.
To get XYZ, I multiply rgb_cam by xyz_rgb. And multiply the resulting matrix by the RGB value. I hope I understood the dcraw code correctly.
Now the question arises, what exactly to use as RGB. I suggested that I need to divide the pre_mul by a white balance factor. As a result, I get values ​​that are approximately similar to Temp / Tint, but there is no accuracy that is found in FastRawViewer.
I need help, I seem to be mistaken somewhere.
If it's easier to look at the code, here's the my test:

```
double out_cam;
double pre_mul = {0,0,0,0};
double cam_xyz = { {0.6722,-0.0635,-0.0963},{-0.4287,1.2460,0.2028},{-0.0908,0.2162,0.5668} }; // 5D Mark III
double black = 0;
double maximum = 0x3c80;
double rgb_cam = {0};
int i, j, k;
int colors = 3;

cam_xyz_coeff (rgb_cam, cam_xyz, pre_mul);

double dblRGGB =
//{1986.0, 1024.0, 1024.0, 1628.0 }; // RGGB 5200
//{1438.0, 1024.0, 1024.0, 2399.0 }; // RGGB 3200
{2275.0, 1024.0, 1024.0, 1393.0 }; // RGGB 7000
double dblWB = {0, 0, 0};
double dblRGB = {0, 0, 0};
double dblXYZ = {0, 0, 0};
GetWBcoef(dblRGGB, dblWB);
for (i=0; i < 3; i++) dblWB[i] = pre_mul[i] / dblWB[i];
double dblWBmax = MAX(dblWB,MAX(dblWB,dblWB));
for (i=0; i < 3; i++) dblRGB[i] = dblWB[i] / dblWBmax;

for (i=0; i < 3; i++)
for (j=0; j < colors; j++)
for (out_cam[i][j] = double(k=0); k < 3; k++)
out_cam[i][j] += xyz_rgb[i][k] * rgb_cam[k][j];
dblXYZ = dblXYZ = dblXYZ = 0;
for (i=0; i < colors; i++) {
dblXYZ += out_cam[i] * dblRGB[i];
dblXYZ += out_cam[i] * dblRGB[i];
dblXYZ += out_cam[i] * dblRGB[i];
}

dng_temperature t;
dng_vector_3 coord(dblXYZ,dblXYZ,dblXYZ);
dng_xy_coord xy = XYZtoXY (coord);
t.Set_xy_coord(xy);
double Temp = t.Temperature();
double Tint = t.Tint();
```

## Forums:

### 1/2 Solved

To get the same Temp/Tint as in ACR you you need to do:
1. CameraNeutral = {G1/R,1,G1/B}; // R, G1, B are WB mul
2. use NeutralToXY from dng_sdk_1_4\dng_sdk\source\dng_color_spec.cpp
3. use Set_xy_coord from dng_sdk_1_4\dng_sdk\source\dng_temperature.cpp to get Temp/Tint

I rewrote the code and got the same result as in ACR. But there is a trouble. I have to get CameraCalibration matrixf for RAW. Another matrix I goto from Adobe dcp files (from DNG Converter).