Avatar billede simsen Mester
21. juli 2010 - 12:41 Der er 5 kommentarer og
1 løsning

Beregn højde og bredde på en thumbnail

Hejsa,

Jeg behøver ikke hjælp til at oprette en thumbnail........men til at beregne højde og bredde.... hvor den bibeholder aspect ratio.....

Når jeg forsøger, så skærer den slet og ret i billedet. Det må den ikke - den skal bibeholde propertionerne bare i mindre udgave.

Det jeg gerne vil opnå:

Ind i metoden kommer
* nuværende billedes bredde og højde (CurrentWidth og CurrentHeight)
* thumbnailens ønskede bredde og højde (NewWidth og NewHeight)

Den skal så tage den højeste af NewWidth og NewHeight og bruge den højste som parameter (altså hvis bredde er 150 og højde 100 skal den tage udgangspunkt i bredden på de 150 og på dansk sk!de hul i højden men bruge bredden som udgangspunkt)

Min kode (hvor den klipper i bredden)
CurrentWidth = 140
CurrentHeight = 166

NewWidth = 150
NewHeight = 100

private Size CreateNewSize(double CurrentWidth, double CurrentHeight, double NewWidth, double NewHeight)
        {
            double Multiplier;
            if (CurrentHeight > CurrentWidth)
            {
                Multiplier = NewHeight / CurrentHeight;
            }
            else
            {
                Multiplier = NewWidth / CurrentWidth;
            }
            Size NewSize = new Size(System.Convert.ToInt32(CurrentWidth * Multiplier), System.Convert.ToInt32(CurrentHeight * Multiplier));
            return NewSize;
        }


Her bruger jeg så ovennævnte kode (til at bygge billedet op)
private byte[] BuildImage(Stream ImageStream, float Width, float Height)
        {
            System.Drawing.Image image = System.Drawing.Image.FromStream(ImageStream);
            Size ImageSize = new Size();

            ImageSize = CreateNewSize(image.Width, image.Height, Width, Height);

            Bitmap Output = new Bitmap(image, ImageSize.Width, ImageSize.Height);
            MemoryStream Stream = new MemoryStream();

            System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(Output);

            graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            graphic.DrawImage(Output, 0, 0, Width, Height);

            System.Drawing.Imaging.ImageCodecInfo[] Info = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
            EncoderParameters encoderParameters;
            encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);


            if (_FileField.PostedFile.ContentType == "image/gif")
            {
                Output.Save(Stream, image.RawFormat);
            }
            else
            {
                Output.Save(Stream, Info[1], encoderParameters);
            }

            byte[] bin = new byte[Stream.Length];
            Stream.Position = 0;
            Int32 n = Stream.Read(bin, 0, bin.Length);
            image.Dispose();
            Output.Dispose();

            return bin;
        }

Håber der er nogen, der har en genial løsning til, hvordan jeg får resized billedet til at passe og den ikke skærer i billedet men resizer pænt og ordentligt.

mvh
simsen :-)
Avatar billede crazysnap Seniormester
21. juli 2010 - 13:07 #1
Hej simsen,

Så vidt jeg kan se, kan det gøres sådan her:

private Size CreateNewSize(double CurrentWidth, double CurrentHeight, double NewWidth, double NewHeight)
{
    double dblWidth = NewWidth;
    double dblHeight = NewHeight;

    if (NewWidth > NewHeight)
        dblHeight = (CurrentHeight / CurrentWidth) * NewWidth;
    else
        dblWidth = (CurrentWidth / CurrentHeight) * NewHeight;

    return new Size((int)dblWidth, (int)dblHeight);
}


Så hvis din thumbnail width er større end din thumbnail height, sætter du thumbnail width til NewWidth og udregner den tilsvarende thumbnail height udfra aspect-ratio af det originale billede (og tilsvarende hvis height er større end width)?
Eller har jeg forstået det forkert?

ps. koden er absolut utestet og lavet hurtigt ud fra min fortolkning af din problemstilling.

Mvh.
CS
Avatar billede simsen Mester
21. juli 2010 - 14:39 #2
Hejsa crazysnap,

Mit problem, hvis jeg forsøger med din kode, er så at den slet og ret ikke tegner den ordentlig (altså det nye billede) - den tilføjer bare noget - du kan se hvad jeg mener her:

http://www.ansi-design.dk/Test/cogp.bmp
Avatar billede crazysnap Seniormester
21. juli 2010 - 15:32 #3
Hej igen,

Jeg ville umiddelbart også påstå at denne sætning i din kode (ca midt i BuildImage):

graphic.DrawImage(Output, 0, 0, Width, Height);

Skulle ændres til:

graphic.DrawImage(Output, 0, 0, ImageSize.Width, ImageSize.Height);


Sammen med min CreateNewSize metode og denne ændring, løser det så dit problem?

Mvh.
CS
Avatar billede simsen Mester
21. juli 2010 - 16:04 #4
Også i den grad........ Jeg har knoklet med det her hele dagen + en 2-3 timer i går aftes.......så jeg er en meget meget lykkelig kvinde nu.

Smid et svar og du får dine points og mange tak for hjælpen :-)
Avatar billede crazysnap Seniormester
21. juli 2010 - 16:14 #5
Det var så lidt og ja, man kan ofte se sig blind i sådanne situationer, men godt at eksperten eksisterer så. ;)

Jeg samler ikke på point, så smid du bare et svar selv. :)

Mvh.
CS
Avatar billede simsen Mester
21. juli 2010 - 19:52 #6
Jeg takker endnu gang og ja eksperten er jeg glad for og har været det i alle de år, jeg har været herinde. Altid nogle søde gutter/gutinder, der gider hjælpe, når jeg er ved at rive håret af mig selv :-)
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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Systemejer/Application Manager til SAP-installationer

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS

Udviklings- og Forenklingsstyrelsen

ITSM-koordinator