Palliser:
According to the manufacturer, this specific display model can handle 24-bmp.
From the Wiki link you supplied above
setPixel(unsigned int poX, unsigned int poY,unsigned int color)
Sets the (poX,poY) pixel to color color. This function is internally used by other graphics APIs.
The display is only 16 bit colour.
There is a small (non relevant) error in your code here
if (read32(f) != 0) {
// compression not supported!
return false;
}
Serial.print("compression "); Serial.println(tmp, DEC);
It won't handle any form of compression (value > 0) but reports header size as compression mode.
Have you tried using older version of Arduino IDE and the older TFT library or altering the older library work on 1.0+ and maybe some simple line/circle commands to confirm library is working okay.