Dr. Dobb's Journal January 1999
Initialize the differential to 1/scale; Initialize the accumulated_differential to 0; Get the first original pixel; Do Copy original_pixel to next_resized_pixel; if (int)(accumulated_differential + differential) > (int)accumulated_differential then Get next original pixel; accumulated_differential += differential; while there are unprocessed original pixels.