In my case, I needed it as a BitmapImage so I made it into an Inventor extension. I don't know if this is what you're looking for. Also, I only needed a 300x300 image, so I hard-coded that in the GetThumbnailImage call. Native size looks to always be 5644x5644. Substitute the 300s with document.Thumbnail.Width and document.Thumbnail.Height, respectively, if that's what you want.
using System;
using System.Drawing.Imaging;
using System.Drawing;
using System.Windows.Media.Imaging;
using Inventor;
using System.IO;
internal static class InventorExtensions
{
internal static BitmapImage GetThumbnailAsBitmapImage(this Document document)
{
BitmapImage docThumbnail;
if (document == null)
{
return null;
}
try
{
if (document.Thumbnail == null)
{
return null;
}
Metafile thumbnailMetafile = new Metafile(new IntPtr(document.Thumbnail.Handle), new WmfPlaceableFileHeader());
System.Drawing.Image.GetThumbnailImageAbort imageCallBack = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
Bitmap thumbnailBitmap = thumbnailMetafile.GetThumbnailImage(300, 300, imageCallBack, IntPtr.Zero) as Bitmap;
docThumbnail = ConvertToBitmapImage(thumbnailBitmap);
picMeta.Dispose();
return docThumbnail;
}
catch (Exception ex) when (ex is System.Runtime.InteropServices.COMException || ex is ArgumentException)
{
return null;
}
}
private static BitmapImage ConvertToBitmapImage(System.Drawing.Bitmap bitmap)
{
if (bitmap == null)
{
return null;
}
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
MemoryStream editStream = new MemoryStream();
bitmap.Save(editStream, ImageFormat.Png);
_ = editStream.Seek(0, SeekOrigin.Begin);
bitmapImage.StreamSource = editStream;
bitmapImage.EndInit();
return bitmapImage;
}
private static bool ThumbnailCallback()
{
return false;
}
}