Bit shifting gives an approximate, but not properly accurate value when upconverting. Do a proper calculation.tags/v1.8.90
g = (p >> dstpf.greenShift) & dstpf.greenMax; | g = (p >> dstpf.greenShift) & dstpf.greenMax; | ||||
b = (p >> dstpf.blueShift) & dstpf.blueMax; | b = (p >> dstpf.blueShift) & dstpf.blueMax; | ||||
r <<= 8 - dstpf.redBits; | |||||
g <<= 8 - dstpf.greenBits; | |||||
b <<= 8 - dstpf.blueBits; | |||||
r = (r * 255 + dstpf.redMax/2) / dstpf.redMax; | |||||
g = (g * 255 + dstpf.greenMax/2) / dstpf.greenMax; | |||||
b = (b * 255 + dstpf.blueMax/2) / dstpf.blueMax; | |||||
// The allowed error depends on: | // The allowed error depends on: | ||||
// | // |