Scaling Images


13 April 2002 @ 21:06

Scaling Images


af Anders Bodeval Carlsen

En af de ting der er så fantastisk ved .NET frameworket er den dybde der er i det  Du kan næsten alt.  Bla. har du rig adgang til at manipulerer med  grafik og billeder med GDI+

Jeg vil i dette eksempel vise hvordan man med ASP.NET kan komprimerer et uploadet billede. For eksemplets skyld har jeg valgt ikke at gemme billedet på serveren, som man nok ville have gjort i praksis, men at skrive billedet til en response stream.  

Tekniken til scalering er fundet i SDK'en men i dette eksempel er teknikken anvendt i  sammehæng med ASP.net.

Bitmap BitmapSource = new Bitmap(File1.PostedFile.InputStream);

Først oprettes et Bitmap objekt med det uploadede billede. 

int ScaleValue = Int32.Parse(Scaling.SelectedItem.Value);
int DestWidth = BitmapSource.Width / ScaleValue;
int DestHeight = BitmapSource.Height/ScaleValue;
Bitmap BitmapDest = new Bitmap(DestWidth,DestHeight);

Størrelsen af destinations-billedet findes. I eksemplet kan man vælge at lave et billede i halv eller kvart størrelse.


Graphics bmpGraphics = Graphics.FromImage(BitmapDest);

// set Drawing Quality
bmpGraphics.InterpolationMode = InterpolationMode.High;

Rectangle compressionRectangle = new Rectangle(0, 0, DestWidth, DestHeight);

bmpGraphics.DrawImage(BitmapSource, compressionRectangle);
BitmapDest.Save(Response.OutputStream, ImageFormat.Jpeg);

 

Her foretages selve scalleringen så. Metoden DrawImage kan kaldes med forskellige argumenter. I dette tilfælde med et Bitmap objekt og med et Rectangle objekt. Source billedet vil så tilpasse sig Rectanglet og enten blive komprimeret eller udvidet alt efter om Rectanglet er større eller mindre end det oprindelige billede.

Som jeg nævnte skriver billedet til sidst til en respons.stream
Jeg kunne have gemt billedet på serverens harddisk ved at skrive f.eks:
            BitmapDest.Save("filnavn.jpg", ImageFormat.Jpeg);

 


Valid XHTML 1.0!