Problem med billedresize

Tags:    asp.net

<< < 12 > >>
Jeg har et problem med at få resized billeder.

Meningen er, at når man uploader et billede, så skal der oprettes forskellige udgaver af billedet i forskellige størrelser, derfor har jeg lavet en klasse der indeholder resize-metoden.

Min klasse-fil ser sådan ud:
Fold kodeboks ind/udCSharp kode 


Når jeg kører den fra denne kode:
Fold kodeboks ind/udCSharp kode 


får jeg denne fejl: System.ArgumentException: Parameter is not valid.

der henviser til denne linje:
Fold kodeboks ind/udCSharp kode 


Er der nogen der kan hjælpe mig her, og fortælle mig hvorfor det ikke virker?



Indlæg senest redigeret d. 29.12.2010 21:37 af Bruger #16330
14 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Simon, som jeg skrev tidligere, så prøv at debugge og se hvad det er for værdier du sender med som parametre :)

Mvh.

Kasper (TSW)



Prøv med denne i stedet for, hvor den nye højde beregnes lidt anderledes. Det er helt sikkert fordi at din nyHojde ikke er en int efter beregningen. Jeg har prøvet at kopiere din kode og debugge.

Fold kodeboks ind/udKode 




Super, den anden måde at beregne højden på hjalp :) Men jeg kan stadig ikke forstå, hvad fejlen var i det andet :S



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:

Fold kodeboks ind/udCSharp kode 


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:

Fold kodeboks ind/udCSharp kode 


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
<< < 12 > >>
t