use floating point values for pixel values to avoid range issues with signed or unsigned shorts