Added support for iCCP and cHRM chunks.

This commit is contained in:
moosecrab 2023-10-27 21:11:08 -07:00
parent 4ad99d6769
commit e6ea2bfd35

View File

@ -153,7 +153,7 @@
End While End While
End Sub End Sub
Private Function BigEndianUInt32(ByRef buf As Byte(), Optional offset As Integer = 0) As UInt32 Private Function BigEndianUInt32(ByRef buf As Byte(), Optional offset As Integer = 0) As UInteger
Return &H1000000L * buf(0 + offset) + &H10000L * buf(1 + offset) + &H100L * buf(2 + offset) + buf(3 + offset) Return &H1000000L * buf(0 + offset) + &H10000L * buf(1 + offset) + &H100L * buf(2 + offset) + buf(3 + offset)
End Function End Function
@ -262,13 +262,31 @@
End If End If
Case "tEXt" Case "tEXt"
Dim keywordlength As Integer = Array.FindIndex(data, Function(x) x = &H0) - 1 Dim keywordlength As Integer = Array.FindIndex(data, Function(x) x = &H0)
Dim keyword(keywordlength - 1) As Byte Dim keyword(keywordlength - 1) As Byte
Dim textstring(data.Length - keywordlength - 1 - 1) As Byte Dim textstring(data.Length - keywordlength - 1 - 1) As Byte
Array.Copy(data, 0, keyword, 0, keywordlength) Array.Copy(data, 0, keyword, 0, keywordlength)
Array.Copy(data, keywordlength + 1, textstring, 0, data.Length - keywordlength - 1) Array.Copy(data, keywordlength + 1, textstring, 0, data.Length - keywordlength - 1)
Console.WriteLine("keyword: {0}", System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(keyword)) Console.WriteLine("keyword: {0}", System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(keyword))
Console.WriteLine("value: {0}", System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(textstring)) Console.WriteLine("value: {0}", System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(textstring))
Case "iCCP"
Dim namelength As Integer = Array.FindIndex(data, Function(x) x = &H0)
Dim profilename(namelength - 1) As Byte
Array.Copy(data, 0, profilename, 0, namelength)
Console.WriteLine("profile name: {0}", System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(profilename))
Case "cHRM"
Dim offset As Integer = 0
For Each pointname As String In {"white point", "red", "green ", "blue"}
Dim xcounts, ycounts As UInteger
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)
offset += 8
Next
End Select End Select
End Sub End Sub