I have taken this so far:

Assume I get the correct palette index of the 8bit image by checking a pixel from a ScanLine in the 8bit DIB

col:=scan(DXD_Scratch.DIB.ScanLine[y]^)[X];

Then, I get the correct colour as an RGBQuad from the DIB colour table like:

q:=DXD_Scratch.DIB.ColorTable[col];

I have checked col and q and both contain the correct data, so all that remains is setting the pixel of the 16bit DXDraw surface.

I have tried all ways I can find to get the target pixel the right colour, but no luck... I am pulling my hair out :x