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
Er der nogen der kan hjælpe mig her, og fortælle mig hvorfor det ikke virker?


For det første, så prøv at rette din code-behind til dette:

Fold kodeboks ind/udCSharp kode 


Så ville jeg lave imageFunctions om til en abstrakt klasse:

Fold kodeboks ind/udCSharp kode 


Ovenstående er IKKE testet, så prøv først og ellers så spørg igen.




Indlæg senest redigeret d. 30.12.2010 11:22 af Bruger #9814
>Vi er enige i at det giver en høj kobling. Men hvad skal klassen ImageFunctions ellers bruges til?

Fx at resize billeder der ikke kommer fra bruger upload? Det kunne være billeder der kom ind i systemet på en anden måde, eller allerede var der.

>Det er ikke unormalt at have en abstrakt klasse, hvor man samler metoder der bruges på tværs af systemet.

Enig, men efter min mening bør de derfor netop også være generelle og tage input på den mest generiske måde, så de kan bruges så mange steder som muligt, og ikke være koblet til en specific control. På den måde kan den også genbruges på tværs af andre projekter og endda andre typer af projekter. Personligt har jeg altid en Utils klasse med statiske metoder til den slags :)

>Og hvis du lægger mærke til det, har jeg fjernet linjen hvor objektet instantieres i onclick metoden ;-)

Det har jeg, men det ændrer ikke på at metoden ikke er tilgængelig fordi den nu er en del af en klasse der ikke kan instantieres, men stadig heller ikke er statisk. Den er med andre ord låst inde :)

Mvh.

Kasper (TSW)



Jeg synes at hans oprindelige løsning var pænere. At sende en WebControl med som parameter giver en høj kobling, hvilket man som udgangspunkt bør undgå. Derudover forstår jeg ikke hvorfor du vil gøre hans klasse abstrakt? I dit eksempel har jeg svært ved at se hvordan han kan bruge metoden, da den ikke er statisk og du ikke må instantiere en abstrakt klasse? :)

Simon, har du prøvet at debugge din kode og se hvad "originalBillede" indeholder, inden du bruger den? Tjek i det hele taget hvad det er du sender afsted som parametre i den linje der fejler, for at se om der er et eller andet der ser suspekt ud :)

Mvh.

Kasper (TSW)



Jeg synes at hans oprindelige løsning var pænere. At sende en WebControl med som parameter giver en høj kobling, hvilket man som udgangspunkt bør undgå. Derudover forstår jeg ikke hvorfor du vil gøre hans klasse abstrakt? I dit eksempel har jeg svært ved at se hvordan han kan bruge metoden, da den ikke er statisk og du ikke må instantiere en abstrakt klasse? :)

Simon, har du prøvet at debugge din kode og se hvad "originalBillede" indeholder, inden du bruger den? Tjek i det hele taget hvad det er du sender afsted som parametre i den linje der fejler, for at se om der er et eller andet der ser suspekt ud :)


Vi er enige i at det giver en høj kobling. Men hvad skal klassen ImageFunctions ellers bruges til? Det er ikke unormalt at have en abstrakt klasse, hvor man samler metoder der bruges på tværs af systemet.

Og hvis du lægger mærke til det, har jeg fjernet linjen hvor objektet instantieres i onclick metoden ;-)



Det har jeg, men det ændrer ikke på at metoden ikke er tilgængelig fordi den nu er en del af en klasse der ikke kan instantieres, men stadig heller ikke er statisk. Den er med andre ord låst inde :)


Som jeg skrev, var det ikke testet, men det er jo bare at sætte metoden til static, hvilket jeg nu har ændret i det tidligere indlæg.

Og jeg bruger det selv på en hjemmeside, så det fungerer vældig fint ;-)



>Som jeg skrev, var det ikke testet, men det er jo bare at sætte metoden til static, hvilket jeg nu har ændret i det tidligere indlæg.

Jeps :)

>Og jeg bruger det selv på en hjemmeside, så det fungerer vældig fint ;-)

Jamen det tror jeg gerne og jeg har heller aldrig påstået at det ikke ville virke. Det ændrer dog ikke på at det er dårlig skik at binde en utility metode op på en specifik control hvis man kan undgå det, hvilket man uden videre kan her :). Hvis man foretrækker at sende indhold frem for en sti med som parameter, så kan man jo sende indholdet af FileContent, som så vidt jeg husker er et array af bytes. På den måde kan metoden stadig bruges på filer man allerede har, ved at læse dem ind i et byte array. Jeg mener dog stadig at en sti er det mest praktiske :)


Mvh.

Kasper (TSW)



Jamen det tror jeg gerne og jeg har heller aldrig påstået at det ikke ville virke. Det ændrer dog ikke på at det er dårlig skik at binde en utility metode op på en specifik control hvis man kan undgå det, hvilket man uden videre kan her :). Hvis man foretrækker at sende indhold frem for en sti med som parameter, så kan man jo sende indholdet af FileContent, som så vidt jeg husker er et array af bytes. På den måde kan metoden stadig bruges på filer man allerede har, ved at læse dem ind i et byte array. Jeg mener dog stadig at en sti er det mest praktiske :)


Selvfølgelig er den høje binding ikke optimal og det vedkender jeg gerne.

Men i nogle tilfælde - som på den hjemmeside hvor jeg selv anvender det - vil billederne aldrig blive født andre steder end gennem fileupload kontrollen. Så man skal ikke undgå høj kobling for enhver pris (lærte jeg da i skolen :lol:)



Nu har jeg forsøgt mig frem, både ved at sende billedestien videre, men også ved at sende upload-kontrollen videre, og det giver stadig samme fejl.

Men jeg har fundet frem til, at problemet er, at den ikke accepterer de parametre jeg sender afsted som højde og bredde. Hvis jeg sætter dem til en fast højde og bredde, fx 200x200, så resizer den uden problemer. Men jeg kan simpelthen ikke gennemskue, hvorfor den fejler på netop dét, for mig ser det ud som om den får det rigtige med :S

Codebehinden ser ud som før, mens klassen nu ser således ud:

Fold kodeboks ind/udCSharp kode 




Kan du ikke prøve at caste til en int her:

Fold kodeboks ind/udKode 


ændres til:

Fold kodeboks ind/udKode 






Det giver stadig samme fejl, også hvis jeg prøver med Convert.ToInt16(.......)



<< < 12 > >>
t