Avatar billede omansf Nybegynder
08. juni 2005 - 11:36 Der er 7 kommentarer og
1 løsning

betydning af System.Drawing.Imaging.EncoderParameter

Jeg er i gang med at opbygge et konverterings / komprimerings modul til brug ved billedupload på internettet.
Jeg har fundet et eksempel men jeg forstår det ikke helt. Hvad f..... er [nummmer]L eks. 100L for en type???
Jeg bruger den til at angive hvor hårdt billedet skal komprimeres.

Håber på svar
/omansf
Avatar billede nielle Nybegynder
08. juni 2005 - 17:40 #1
100L er simpelthen det samme som 100. L’et betyder at der er tale om typen long.

Denne notation optræder i sammenhænge, hvor man ønsker at skrive en talværdi og samtidigt sikre sig at den bliver behandlet som en bestemt type.

Andre muligheder er:

l for long, u for uint, ul for ulong, f for float, d for double og m for decimal.

Mon ikke vare de 100L, alternativt 100l, står for 100% i dette tilfælde - altså "ingen komprimering".
Avatar billede omansf Nybegynder
10. juni 2005 - 12:51 #2
Jeg får en fejl hvis ikke jeg skriver L, hvordan skal en atribut på en metode skrives for at man tvinger folk til at skrive L efter tallet?
Avatar billede nielle Nybegynder
10. juni 2005 - 13:08 #3
Hvordan ser den kode ud hvor du får fejlen?
Avatar billede omansf Nybegynder
10. juni 2005 - 14:11 #4
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.Quality, 50L );

hvis jeg i stedet skriver 50 (uden L) så fungere det ikke.. Og en int er så vidt jeg ved ikke noget problem at omskrive til en long, også uden at caste.
Avatar billede nielle Nybegynder
10. juni 2005 - 14:44 #5
Nu er det vel næppe et mål i sig selv at man skal gennemtvinge at folk skriver det L bagefter eller ej?

Jeg har ikke undersøgt nærmere hvorfor det lige går galt med dit kode eksempel, men jeg kunne forestille mig at det havde noget at gøre med overloading af funktioner. Se f.eks. det nedenstående kodeeksempel, som resulterer i en fejl hvis L’et udelades:

using System;

namespace Eksperten
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            Class2 C2 = new Class2();
            int Resultat = C2.Metode(100L);
        }
    }

    class Class2
    {
        public void Metode(int Arg)
        {
        }

        public int Metode(double Arg)
        {
            return 42;
        }
    }
}

Grunden er at funktionen ”Metode” er overloadet; Når compileren skal bestemme sig til hvilken af de to versioner den skal bruge, så kigger den på argumenterne (den ser derimod overhovedet ikke på returtypen!). Derfor vil den forsøge at bruge den første version hvis man udelod L’et:

int Resultat = C2.Metode(100);

Dette skyldes at værdien 100 som default vil blive opfattet som en int. Da denne overload ikke returnere noget (void) så giver det automatisk en fejl når man forsøger at kompilere.

Hvis man derimod vil fortælle compileren at den skal bruge den anden overloadede version, så skal man fortælle den at de 100 altså er en double:

int Resultat = C2.Metode(100L);

Så, derfor.
Avatar billede nielle Nybegynder
24. juni 2005 - 17:43 #6
Lukketid?
Avatar billede omansf Nybegynder
24. juni 2005 - 19:12 #7
Ja lukketid, jeg har bare lige været på ferie, så derfor mit fravær. Kan du ikke skrive et svar så jeg kan sende dig point
Avatar billede nielle Nybegynder
24. juni 2005 - 19:39 #8
Eksperten.dk har nu heller ikke udsendt mails indtil for et par dage siden, så det er ikke så underligt at folk ikke aner at der er kommet indlæg på deres spørgsmål.

Og et svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester