2010-06-23 2 views
0

Я хочу получить изображение от пользователя и изменить его размер до определенного размера, но проблема в следующем: Я не знаю размер изображения пользователя, и я должен изменить его размер до определенного размера, но деформация здесь лежит бремя.Как изменить размер изображения с неизвестным размером до определенного размера без чрезмерной деформации?

как я могу решить эту проблему? есть ли какой-нибудь алгоритм? или есть ли какой-либо исходный код в .net? С уважением.

ответ

1

Что касается деформации, вы можете использовать комбинацию обрезки и изменения размера. Ваш пользователь поможет вам с обрезкой.

Я нашел этот код на Code Project с помощью простого поиска Google в .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; 
}