私は数学が本当に苦手で、画像のサイズ変更アルゴリズムに問題があります。画像のサイズを特定の比率に変更しようとしています。
double neededRatio = 1.6d;
while (!AboutEqual(imageRatio, neededRatio))
{
var cropPixels = 10;
//crop code
...
imageRatio = (double)img.Width / img.Height;
}
public static bool AboutEqual(double x, double y)
{
double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
return Math.Abs(x - y) <= epsilon;
}
問題は、メソッドを実際に機能させるためにトリミングする適切なピクセル数が見つからないように見えることです(ここでAboutEqual
見つけました)。失敗して画像が無期限にトリミングされることがあります。メソッドの内部動作をログに記録しようとしましたが、次のように奇妙なことが表示されています。AboutEqual
X: 1.5249500998004 Y: 1.6 result: false
X: 1.55600814663951 Y: 1.6 result: false
X: 1.55600814663951 Y: 1.6 result: false
X: 1.58835758835759 Y: 1.6 result: false
X: 1.62208067940552 Y: 1.6 result: false
X: 1.60084925690021 Y: 1.6 result: false
X: 1.5796178343949 Y: 1.6 result: false
X: 1.61388286334056 Y: 1.6 result: false
X: 1.59219088937093 Y: 1.6 result: false
X: 1.62749445676275 Y: 1.6 result: false
X: 1.60532150776053 Y: 1.6 result: false
X: 1.58314855875831 Y: 1.6 result: false
X: 1.61904761904762 Y: 1.6 result: false
X: 1.59637188208617 Y: 1.6 result: false
X: 1.63341067285383 Y: 1.6 result: false
リンクされた質問には、「xとyの両方が計算値である場合は、イプシロンを増やす必要があります」と書かれています。-どうすればそれを行い、トリミングするのに最適なピクセル数を見つけることができますか?