Haven't seen the staff solution's output, but one approach is to take the average of several pixels.
If you downsize an 8x8 to 4x4, there's 2x2 pixels of the original bitmap you can average to obtain one output pixel.
For not so nice rations like 0.75 (not of the form 1/n), you could either average different numbers of rows/columns (like 4 to 3 as 1-2-1), or lay another grid over the image, and weigh the different pixels by the area of the output pixel they cover.
For 0.75 you'd average the first and second input row with weights 0.75/0.25 for first output row, second output row is second and third input row with weights 0.5/0.5, third output row is third and fourth input rows with weights 0.25/0.75. Same for columns.
In my example, every input line got a weight of 0.75 in the output image, that's the resize factor, and weights for any given output row add to 1.
It's easier done if you keep the whole image in memory, but you could reduce it to holding one input line and one output line.
Resizing to enlarge is even more interesting, most basic with repeating pixels, linear interpolation, or bicubic splines, or approaches that better preserve edges.