2011-01-31 9 views
2

誰もこの問題についての光を放つことはできますか?Imageサイズ変更の計算 - 何が起こっていますか?

ASP.NET 4.0/C#

コード:

Image image = Image.FromStream(Request.Files[0].InputStream); 
var newWidth = 150; 
var current = image.Width; 
double scaleHeight = (150/current); 
if (scaleHeight == 0) 
{ 
    scaleHeight = 0.2; 
} 
var newHeight = Convert.ToInt32(image.Height * scaleHeight); 
var thumbnailBitmap = new Bitmap(newWidth, newHeight); 
Graphics thumbnailGraph = Graphics.FromImage(thumbnailBitmap); 

このコードは常に0.2としてScaleHeightの値を設定し、上記。奇妙なことにimage.Widthはイメージの正しい幅を参照しているので、論理的に150/xはxの小数点以下のパーセンテージを与えるはずですが、そのパーセンテージ(高さ*結果)に基づいて新しい高さを試すことができます。私はそれが数学だと思う! hehe。

例:150/1024 == 0.1464。次に768 * 0.1464 == 112(int) - 768の14%は約112です。これはコード内では動作しません。

私は明らかにここで何か愚かに間違っているんだ、誰もこれにどのような光を当てることができますか?

不審な質問にお答えします。助けてくれてありがとう!

Chris。

答えて

10

は、常に上記のこのコードは、あなたのVARの0.2

注意深いとしてScaleHeightの値を設定します。 image.Widthは整数であるので、あなたはここで整数の除算を行っている。現在は150よりも大きい場合

(150/current); 

は、結果は常に0になりますdoubleに結果を割り当てる動作は、結果ではなかったことを意味するものではありません整数除算を使用して得られる。このお試しください:もちろん

double scaleHeight = (150.0/current); 

を、それは本当にこのようになります。注意点として

double newWidth = 150; 
var current = image.Width; 
double scaleHeight = (newWidth/current); 

、「VAR」キーワードは、あなたのコード内の不要な冗長性を減らすための素晴らしいです。しかし、私はのすべてをと 'var'と宣言するという習慣にはなりません。 1つは、特定のコードスニペットをあまり明確にしないためです。第二に、あなたは本当にどんなタイプの入力も保存していません(ok、もう二倍のタイプの文字を入力しますが、それが必要です!)。私の助言は、あなたのコードを読んで理解しやすくするためには、あまり不要な冗長性があるため、 'var'を使うことだけです。 intを宣言するなどの単純なことについては、それは必要ではなく、値を追加しません。

+0

優秀、ありがとうございましたEd - 完璧に働いた。 –

+0

+1は 'var'の過度の使用に対する警告です。 – 5arx

関連する問題