今回実装した中でこれが一番大変だった。
平均画素法は、縮小だけであれば多分ちょっとした計算で出せる。バイリニアほど簡単じゃないけど。
けれどアフィン変換を使って縮小するとなると、話は別。
真面目にサンプリングする必要が出てくる。
こうなると、比率次第でサンプリング量が発散する。
例えば 1000pixel を 999pixel にするには 999000pixel のサンプリングが必要で、こいつをどう押さえ込むかがカギ。
大分悩んだけど、要するにこの方法もサブピクセルを求めている訳であるから、比率とはつまりピクセルの分割数になる。
ってことは、分割数にリミッタを設けてしまおう、と思いついた。どうせ元画素に 1pixel 以上の解像度は無いのだから、999 分割しても 10 分割しても、そう大きく違いは無い。
なら仮にリミッタが 10 分割なら、初めから 10 分割して縮小するコードを書けばいいじゃん、となる。フォントのアンチエイリアスみたいに。
それで正しいけれども、そうはしない。
何故ならこの方法は最小公倍数を求めているから。
つまり、目的を遂行するにあたって最適解が得られているので、比率が 2:1 とかなら必ずしも 10 分割する必要は無くて、非常に高速。