2010-06-23 2 views
0

Je veux obtenir une image d'un utilisateur et la redimensionner à une taille spécifique, mais le problème est: Je ne connais pas la taille de l'image de l'utilisateur et je dois redimensionner à une certaine taille, mais la déformation est le fardeau ici.comment redimensionner une image avec une taille inconnue à une taille spécifique sans trop de déformation?

comment puis-je résoudre ce problème? Y a-t-il un algorithme en fonction de cela? ou existe-t-il un code source de préférence dans .net? meilleures salutations.

Répondre

1

En ce qui concerne la déformation, vous pouvez utiliser une combinaison de recadrage et de redimensionnement. Votre utilisateur vous aidera avec le recadrage.

Je trouve ce code sur Code Project avec une simple recherche Google de .net resize an image

imgPhoto = FixedSize(imgPhotoVert, 300, 300); 
imgPhoto.Save(WorkingDirectory + 
    @"\images\imageresize_3.jpg", ImageFormat.Jpeg); 
imgPhoto.Dispose(); 
.... 
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; 

    float nPercent = 0; 
    float nPercentW = 0; 
    float nPercentH = 0; 

    nPercentW = ((float)Width/(float)sourceWidth); 
    nPercentH = ((float)Height/(float)sourceHeight); 
    if(nPercentH < nPercentW) 
    { 
     nPercent = nPercentH; 
     destX = System.Convert.ToInt16((Width - 
         (sourceWidth * nPercent))/2); 
    } 
    else 
    { 
     nPercent = nPercentW; 
     destY = System.Convert.ToInt16((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); 

    Graphics grPhoto = Graphics.FromImage(bmPhoto); 
    grPhoto.Clear(Color.Red); 
    grPhoto.InterpolationMode = 
      InterpolationMode.HighQualityBicubic; 

    grPhoto.DrawImage(imgPhoto, 
     new Rectangle(destX,destY,destWidth,destHeight), 
     new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight), 
     GraphicsUnit.Pixel); 

    grPhoto.Dispose(); 
    return bmPhoto; 
} 
Questions connexes