Wow, that was easy. For who is interested, here the code to read thumbs, file format very old up to 2013:
Imports System.Drawing
Imports System.IO
' 2011 Copyright (C) jgr=&jgr, via http://www.theswamp.org
' 2012 (me): Added code to read PNG Thumbnails from DWG (2013 file format)
Friend NotInheritable Class ThumbnailReader
Private Sub New()
End Sub
Friend Shared Function GetBitmap(fileName As String) As Bitmap
Using fs As New FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Using br As New BinaryReader(fs)
fs.Seek(&HD, SeekOrigin.Begin)
fs.Seek(&H14 + br.ReadInt32(), SeekOrigin.Begin)
Dim bytCnt As Byte = br.ReadByte()
If bytCnt <= 1 Then
Return Nothing
End If
Dim imageHeaderStart As Integer
Dim imageHeaderSize As Integer
Dim imageCode As Byte
For i As Short = 1 To bytCnt
imageCode = br.ReadByte()
imageHeaderStart = br.ReadInt32()
imageHeaderSize = br.ReadInt32()
If imageCode = 2 Then ' BMP Preview (2012 file format)
' BITMAPINFOHEADER (40 bytes)
br.ReadBytes(&HE)
'biSize, biWidth, biHeight, biPlanes
Dim biBitCount As UShort = br.ReadUInt16()
br.ReadBytes(4)
'biCompression
Dim biSizeImage As UInteger = br.ReadUInt32()
'br.ReadBytes(0x10); //biXPelsPerMeter, biYPelsPerMeter, biClrUsed, biClrImportant
'-----------------------------------------------------
fs.Seek(imageHeaderStart, SeekOrigin.Begin)
Dim bitmapBuffer As Byte() = br.ReadBytes(imageHeaderSize)
Dim colorTableSize As UInteger = CUInt(Math.Truncate(If((biBitCount < 9), 4 * Math.Pow(2, biBitCount), 0)))
Using ms As New MemoryStream()
Using bw As New BinaryWriter(ms)
bw.Write(CUShort(&H4D42))
bw.Write(54UI + colorTableSize + biSizeImage)
bw.Write(New UShort())
bw.Write(New UShort())
bw.Write(54UI + colorTableSize)
bw.Write(bitmapBuffer)
Return New Bitmap(ms)
End Using
End Using
ElseIf imageCode = 6 Then ' PNG Preview (2013 file format)
fs.Seek(imageHeaderStart, SeekOrigin.Begin)
Using ms As New MemoryStream
fs.CopyTo(ms, imageHeaderStart)
Dim img = Image.FromStream(ms)
Return img
End Using
ElseIf imageCode = 3 Then
Return Nothing
End If
Next
End Using
End Using
Return Nothing
End Function
End Class