使用したライブラリ
Q.25. 最近傍補間
最近傍補間により画像を1.5倍に拡大せよ。
関数のスケール変換の式をそのまま使うだけです。普段はバイリニア補間等を使うので実装したことはありませんが、簡単ですね。問題文記載の式は間違っているので注意が必要です(x/ax->x/a,y/ay->y/aが正しい)。
int main()
{
PPM ppm("imori.pnm");
int width = ppm.Get_width();
int height = ppm.Get_height();
double a = 1.5;
int Width = width * a, Height = height * a;
PPM ppm2(Width, Height);
for(int j=0; j<Height; j++)
for (int i = 0; i < Width; i++)
{
ppm2(i, j, 'r') = ppm(std::round(i / a), std::round(j / a), 'r');
ppm2(i, j, 'g') = ppm(std::round(i / a), std::round(j / a), 'g');
ppm2(i, j, 'b') = ppm(std::round(i / a), std::round(j / a), 'b');
}
ppm2.Flush("out.ppm");
return 0;
}