Hej Simon
Jeg ved ikke hvor meget du kender til de forskellige datatyper, men som du sikkert ved findes der heltal (integers) og decimaltal (floats, mv).
I din oprindelige kode benytter du originalBillede.Height, originalBillede.Width og nyBredde som alle tre er af typen int. Det betyder når du laver udregninger med disse foretages der heltalsdivision, hvilket betyder at eventuelle decimaler forsvinder. Lad os tage et eksempel, du har f.eks. et original billede på 1000x800 og ønsker at den nye bredde skal være 500 - din udregning vil da være:
nyHojde = (800 / 1000) * 500
nyHojde = (0) * 500 // OBS ikke 0.8 da vi laver heltalsdivision!
nyHojde = 0
Problemet kan løses på to måder, enten ved at caste int'sne til doubles inden udregning og så tilbage bagefter - hvilket er ideen i den løsning, du har fået. Det kan dog også gøres på en enkelt linje:
- int nyHojde = (int)((originalBillede.Height / (double)originalBillede.Width) * nyBredde);
Bemærk at blot et enkelt af de tal, der indgår i beregningen, skal være en double for at der ikke bliver foretaget heltalsdivision.
Alternativt kan problemet løses ved at bytte om på rækkefølgen de forskellige operationer udføres - selvom udtrykkene matematisk set er identiske:
- int nyHojde = originalBillede.Height * nyBredde / originalBillede.Width;
Tager vi eksemplet fra før igen fås:
nyHojde = 800 * 500 / 1000
nyHojde = 400000 / 1000
nyHojde = 400
Rækkefølgen har altså betydning, når man regner med heltal!
Håber det forklarer problemet nogenlunde, ellers må du bare spørge.
Indlæg senest redigeret d. 01.01.2011 11:48 af Bruger #2416