16bitRGB(5bit * 3)画像にアンチエリアシングをかけてみよう思ったのですがうまくいきません。

拡大したソース画像の大きさと出力先画像との拡大率をもとに
ボックスフィルタリングの方法を使って出力しようと思ったんですが、
整数倍した画像を出力すると元通りになって出力され、
1.5倍とか端数をつけて拡大するとへんな風になります。

だれかどこがおかしいかわかる人いますか?

// red[0]->求める画素
// red[1]->求める画素のx + 1
// red[2]->求める画素のy + 1
// red[3]->求める画素のy + 1,x + 1
// green[],blue[]モ同じ。

red1 = (short)((1.0 - y_fraction) * ((1.0 - x_fraction) * red[0] + x_fraction * red[1]));
green1 = (short)((1.0 - y_fraction) * ((1.0 - x_fraction) * green[0] + x_fraction * green[1]));
blue1 = (short)((1.0 - y_fraction) * ((1.0 - x_fraction) * blue[0] + x_fraction * blue[1]));
red2 = (short)(y_fraction * ((1.0 - x_fraction) * red[2] + x_fraction * red[3]));
green2 = (short)(y_fraction * ((1.0 - x_fraction) * green[2] + x_fraction * green[3]));
blue2 = (short)(y_fraction * ((1.0 - x_fraction) * blue[2] + x_fraction * blue[3]));

r_comp = (short)(red1 + red2);
g_comp = (short)(green1 + green2);
b_comp = (short)(blue1 + blue2);

dst_color = (short)((r_comp & 0x7c00) | (g_comp & 0x03e0) | (b_comp & 0x001f));