Nice work paul. For the 2 ways, i get around 10fps and 42 fps.
I've been doing it something like this although it probably won't make much difference:
;everything is (unsigned) integer except x_fraction and y_fraction
x_blend=(255.0*x_fraction)+1
y_blend=(255.0*y_fraction)+1
top_l_blend=(x_blend*(257-y_blend))shr 8
top_r_blend=((257-x_blend)*(257-y_blend))shr 8
bot_l_blend=(x_blend*y_blend)shr 8
bot_r_blend=((257-x_blend)*y_blend)shr 8
r_b=(((argb0 and $ff00ff)*top_l_blend)+((argb1 and $ff00ff)*top_r_blend)+((argb2 and $ff00ff)*bot_l_blend)+((argb3 and $ff00ff)*bot_r_blend))and $ff00ff00
g__=(((argb0 and $ff00)*top_l_blend)+((argb1 and $ff00)*top_r_blend)+((argb2 and $ff00)*bot_l_blend)+((argb3 and $ff00)*bot_r_blend))and $ff0000
argb_out=(r_b or g__)shr 8
It calculates the weights for each of the 4 pixels first.