Based on the info you gave me, here's what I was able to figure out:
It is a 40 byte header. I actually believe it's a 10 uint32 header. Based on that, this is what I believe is the record format of an image:
Position | Purpose |
0 | ?? - File Type? Always set to 0x8005 to indicate it's an image? |
4 | ?? - Unknown Value |
8 | ?? - Unknown Value |
12 | ?? - Unknown Value |
16 | Width of image |
20 | Height of image |
24 | ?? - Unknown Value |
28 | ?? - Unknown Value |
32 | ?? - Unknown Value |
36 | The pixel format used in this image |
40 | The actual pixel data as an array of int16 (`Width` * `Height` * 2) |
I have the data file reader processing a RGBA4444 format into a class called Image. Each pixel in the data is converted from uint16 to ImagePixel class that contains Red, Green, Blue, Alpha properties. That was simple since and just need to do RGBA565 next. I'll output some of these as PNG just so I can confirm they are correct. Honestly, I don't think I'm keeping ImagePixel as it's a waste of space since we're not doing direct image manipulation and uint32 works just as well.
The other thing I noticed is that all images are 256 pixels wide and the images basically wrap. I'm sure one of those values in the header describes the wrapping, but haven't really analyzed multiple records yet.