matrix.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. static float XYZD50_to_D65[] = { 0.9555766f, -0.0230393f, 0.0631636f,
  2. -0.0282895f, 1.0099416f, 0.0210077f,
  3. 0.0122982f, -0.0204830f, 1.3299098f };
  4. static float XYZD65_to_sRGB[] = { 3.2406f, -1.5372f, -0.4986f,
  5. -0.9689f, 1.8758f, 0.0415f,
  6. 0.0557f, -0.2040f, 1.0570f };
  7. void multiply_matrices(float a[9], float b[9], float out[9]);
  8. void
  9. invert_matrix(const float in[9], float out[9])
  10. {
  11. float det = in[0] * (in[4] * in[8] - in[5] * in[7]) -
  12. in[1] * (in[3] * in[8] - in[5] * in[6]) +
  13. in[2] * (in[3] * in[7] - in[4] * in[7]);
  14. out[0] = (in[4] * in[8] - in[7] * in[5]) / det;
  15. out[1] = (in[7] * in[2] - in[1] * in[8]) / det;
  16. out[2] = (in[1] * in[5] - in[4] * in[2]) / det;
  17. out[3] = (in[6] * in[5] - in[3] * in[8]) / det;
  18. out[4] = (in[0] * in[8] - in[6] * in[5]) / det;
  19. out[5] = (in[3] * in[2] - in[0] * in[5]) / det;
  20. out[6] = (in[3] * in[7] - in[6] * in[4]) / det;
  21. out[7] = (in[6] * in[1] - in[0] * in[7]) / det;
  22. out[8] = (in[0] * in[4] - in[3] * in[1]) / det;
  23. }
  24. void
  25. transpose_matrix(const float in[9], float out[9])
  26. {
  27. for (int i = 0; i < 3; ++i)
  28. for (int j = 0; j < 3; ++j)
  29. out[i + j * 3] = in[j + i * 3];
  30. }