28. marts 2003 - 09:25Der er
11 kommentarer og 1 løsning
Upload og skalering af billede med .net
Jeg har lavet den funktion der uploader et billede ved brug af .net. herefter skal billedet skaleres så det passer i den visning jeg har lavet. Efter denne skalering er billedet meget utydeligt. Hvad skyldes?
Det kommer helt an på hvordan din skalering laves. Hvis du bruger GetThumbnailImage vil du ofte få denne fejl. Det skyldes at den tager et indlejret Thumbnail som ligger i billedet.
Jeg har engang downloadet et eksempel til skalering af billeder, jeg kan desværre ikke huske hvor jeg downloade det - men her er koden. Jeg har selv brugt koden med succes :-)
using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D;
namespace Tutorial { class ImageResize { enum Dimensions { Width, Height } enum AnchorPosition { Top, Center, Bottom, Left, Right } [STAThread] static void Main(string[] args) { //set a working directory string WorkingDirectory = @"C:\Projects\Tutorials\ImageResize";
grPhoto.DrawImage(imgPhoto, new Rectangle(destX,destY,destWidth,destHeight), new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight), GraphicsUnit.Pixel);
grPhoto.Dispose(); return bmPhoto; } static Image ConstrainProportions(Image imgPhoto, int Size, Dimensions Dimension) { int sourceWidth = imgPhoto.Width; int sourceHeight = imgPhoto.Height; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0; float nPercent = 0;
grPhoto.DrawImage(imgPhoto, new Rectangle(destX,destY,destWidth,destHeight), new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight), GraphicsUnit.Pixel);
grPhoto.Dispose(); return bmPhoto; }
static Image FixedSize(Image imgPhoto, int Width, int Height) { int sourceWidth = imgPhoto.Width; int sourceHeight = imgPhoto.Height; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0;
//if we have to pad the height pad both the top and the bottom //with the difference between the scaled height and the desired height if(nPercentH < nPercentW) { nPercent = nPercentH; destX = (int)((Width - (sourceWidth * nPercent))/2); } else { nPercent = nPercentW; destY = (int)((Height - (sourceHeight * nPercent))/2); }
int destWidth = (int)(sourceWidth * nPercent); int destHeight = (int)(sourceHeight * nPercent);
Bitmap bmPhoto = new Bitmap(Width, Height, PixelFormat.Format24bppRgb); bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
grPhoto.DrawImage(imgPhoto, new Rectangle(destX,destY,destWidth,destHeight), new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight), GraphicsUnit.Pixel);
grPhoto.Dispose(); return bmPhoto; } static Image Crop(Image imgPhoto, int Width, int Height, AnchorPosition Anchor) { int sourceWidth = imgPhoto.Width; int sourceHeight = imgPhoto.Height; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0;
grPhoto.DrawImage(imgPhoto, new Rectangle(destX,destY,destWidth,destHeight), new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight), GraphicsUnit.Pixel);
det er måske heller ikke det smarteste at klasserne hedder det samme :/
en tommelfingerregel er, at klasserne i webcontrols-namespacet producerer almindelig HTML/Javasscript-kode når siden bliver sendt til klienten, så hvis det du har gang i ikke kan lade sig gøre på en .html-side, så kan de klasser ikke hjælpe dig.
pointen: du kan ikke skalere et billede (ikke på pixel-niveau i hvert fald) på en html-side
Synes godt om
Ny brugerNybegynder
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.