2010-06-28 2 views
1

После поиска, я обнаружил этот код:Адаптировать asp.net код, чтобы изменить размер изображения

Public Sub ResizeImage(ByVal scaleFactor As Double, ByVal fromStream As Stream, ByVal toStream As Stream) 
    Dim image__1 = System.Drawing.Image.FromStream(fromStream) 
    Dim newWidth = CInt(image__1.Width * scaleFactor) 
    Dim newHeight = CInt(image__1.Height * scaleFactor) 
    Dim thumbnailBitmap = New System.Drawing.Bitmap(newWidth, newHeight) 

    Dim thumbnailGraph = System.Drawing.Graphics.FromImage(thumbnailBitmap) 
    thumbnailGraph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality 
    thumbnailGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality 
    thumbnailGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic 

    Dim imageRectangle = New System.Drawing.Rectangle(0, 0, newWidth, newHeight) 
    thumbnailGraph.DrawImage(image__1, imageRectangle) 
    thumbnailBitmap.Save(toStream, image__1.RawFormat) 

    thumbnailGraph.Dispose() 
    thumbnailBitmap.Dispose() 
    image__1.Dispose() 
End Sub 

Есть 2 вещи, которые я не могу «изменить», чтобы решить мою проблему:

  1. Я не хотел бы передавать поток, но я предпочитаю пройти путь, как C:\mysite\photo\myphoto.gif. Как я могу «преобразовать» его, чтобы принять файл, а не поток?
  2. В этой функции я должен передать значение «шкалы». Но я предпочитаю проверять, слишком ли велико изображение (например,>1024x768), чем изменить его размер до 1024x768. Как я могу проверить это с помощью System.Drawing.

Как вы можете видеть, я ничего не знаю о System.Drawing, поэтому мне нужна «жесткая» помощь для решения этой задачи.

+0

ImageBuilder.Current.Build (sourcePathOrStream, destPathOrStream, new ResizeSettings ("maxwidth = 1024 & maxheight = 768")) '// Это одна строка кода, использующая бесплатную библиотеку http://imageresizing.net. И избежать ошибок [29 изображений] (http://nathanaeljones.com/163/20-image-resizing-pitfalls/). –

ответ

0

Вот код c#, который я сделал около 5 лет назад, чтобы сделать это (он все равно должен работать, я надеюсь, что приложение не было затронуто с тех пор). Я думаю, что это все, что вам нужно, но оно не масштабирует изображение до 1024x768, если оно меньше. Этот код будет только убедиться, что, если он больше, чем 1024x768, он будет изменять размер пропорционально вписываться в этих размерах:

const int maxWidth = 1024; 
const int maxHeight = 768; 
Image newImage = Image.FromFile("YourPicture.jpg"); 
double percentToShrink = -1; 
if (newImage.Width >= newImage.Height) 
{ 
    // Do we need to resize based on width? 
    if (newImage.Width > maxWidth) 
    { 
     percentToShrink = (double)maxWidth/(double)newImage.Width; 
    } 
} 
else 
{ 
    // Do we need to resize based on width? 
    if (newImage.Height > maxHeight) 
    { 
     percentToShrink = (double)maxHeight/(double)newImage.Height; 
    } 
} 

int newWidth = newImage.Width; 
int newHeight = newImage.Height; 

// So do we need to resize? 
if (percentToShrink != -1) 
{ 
    newWidth = (int)(newImage.Width * percentToShrink); 
    newHeight = (int)(newImage.Height * percentToShrink); 
} 

// convert the image to a png and get a byte[] 
MemoryStream imgStream = new MemoryStream(); 
Bitmap bmp = new Bitmap(newWidth, newHeight); 
using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
    g.FillRectangle(System.Drawing.Brushes.White, 0, 0, newWidth, newHeight); 
    g.DrawImage(newImage, 0, 0, newWidth, newHeight); 
} 

// This can be whatever format you need 
bmp.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png); 
byte[] imgBinaryData = imgStream.ToArray(); 
imgStream.Dispose(); 

Если вам нужно преобразовать это в VB.NET, вы можете использовать C# для VB. NET преобразователь here.

0

Первый вопрос:

Dim newImage Как Image = Image.FromFile ("SampImag.jpg")

Второй вопрос:

Построить частный метод, который возвращает вам объект размера, основанный на оригинальный размер объекта данного изображения. Вы также можете добавить флаг «сохранить пропорции», если хотите.

Смежные вопросы