Added support for gAMA chunk and white point calculation.

This commit is contained in:
moosecrab 2023-11-12 06:30:46 -08:00
parent e6ea2bfd35
commit ec6b39eb3c

View File

@ -280,13 +280,25 @@
Dim offset As Integer = 0
For Each pointname As String In {"white point", "red", "green ", "blue"}
Dim xcounts, ycounts As UInteger
Dim extrainfo As String = ""
xcounts = BigEndianUInt32(data, offset)
ycounts = BigEndianUInt32(data, offset + 4)
Console.WriteLine("{0}: x = {1:g} y = {2:g}", pointname, xcounts / 100000.0, ycounts / 100000.0)
'Calculate color temperature of white point
If pointname = "white point" Then
Dim n As Double = ((xcounts / 100000.0) - 0.332) / ((ycounts / 100000.0) - 0.1858)
Dim cctapprox As Double = (-449 * n ^ 3) + (3525 * n ^ 2) - (6823.3 * n) + 5520.33
extrainfo = " (" & cctapprox.ToString("F0") & " K)"
End If
Console.WriteLine("{0}: x = {1:g} y = {2:g}{3}", pointname, xcounts / 100000.0, ycounts / 100000.0, extrainfo)
offset += 8
Next
Case "gAMA"
Dim gammacounts As UInteger = BigEndianUInt32(data)
Console.WriteLine("gamma: 1/{0:g5}", 1 / (gammacounts / 100000.0))
End Select
End Sub