The startscan parameter is not correctly handled in SetDIBits; the behaviour is not right when it's not null. The patch here corrects it, but I'm not sure it's the right way to do it . It's possible that also SetDIBitsToDevice() has the same problem, but I didn't look at it. Ciao Max