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 :-)