• Status: Solved
• Priority: Medium
• Security: Public
• Views: 340

# resize image

I have this link but on that I can't keep same aspect ratio same. What I need to do?
0
1jaws
4 Solutions

To keep the aspect ratio, you would need to calculate the change on one of the dimensions and apply that change to the other dimension. I.e. divide the new width for the image by the original width of the image. Then multiply this value to the original height of the image.
0

Author Commented:
thank you for replying.. is it possible to show that how I might be able to do that?
0

Commented:

``````public static Size ProportionalSize(Size imageSize, Size MaxW_MaxH)
{
double multBy= 1.01;
double w= imageSize.Width;   double h= imageSize.Height;

while(w < MaxW_MaxH.Width && h < MaxW_MaxH.Height)
{
w= imageSize.Width*multBy;
h= imageSize.Height*multBy;
multBy= multBy+.001;
}

while(w > MaxW_MaxH.Width || h > MaxW_MaxH.Height)
{
multBy= multBy-.001;
w= imageSize.Width*multBy;
h= imageSize.Height*multBy;
}

if(imageSize.Width < 1)
imageSize=new Size(imageSize.Width+-imageSize.Width+1, imageSize.Height-imageSize.Width-1);
if(imageSize.Height < 1)
imageSize=new Size(imageSize.Width-imageSize.Height-1, imageSize.Height+-imageSize.Height+1);

imageSize= new Size(Convert.ToInt32(w), Convert.ToInt32(h));
return imageSize;
}
``````
0

Author Commented:
I have this code and how I need to put above code to this?
``````public bool ThumbnailCallback()
{
return false;
}

//Create a thumbnail
public void CreateThumb(string fileName, System.IO.Stream imageStream, int width, int height)
{
System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
using (Bitmap originalImage = new Bitmap(imageStream))
{
using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, height, thumbnailImageAbortDelegate, IntPtr.Zero))
{
thumbnail.Save(fileName);
}
}
}

private void Button1_Click(object sender, System.EventArgs e)
{
string targetFolder = "c:\\temp\\";
string suffix = "_thumb";
CreateThumb(
targetFolder +
string.Concat(file.GetNameWithoutExtension(), suffix, file.GetExtension()), file.InputStream,
300,   300);
}
``````
0

Using the code from the example...

Note: you could use either the passed in width or height parameter to determine the aspect ratio.
``````public void CreateThumb(string fileName, System.IO.Stream imageStream, int width, int height)
{
System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
using (Bitmap originalImage = new Bitmap(imageStream))
{
int newHeight = originalImage.Height * (newWidth / originalImage.Width);
using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, newHeight, thumbnailImageAbortDelegate, IntPtr.Zero))
{
thumbnail.Save(fileName);
}
}
}
``````
0

Author Commented:
says newWidth doest exist in the context
0

Author Commented:
int newWidth = originalImage.Width;
0

Author Commented:
I put above didnt work...
0

Author Commented:
Shaun_Kline, I cant get this to work, we are in right direction but actually don't know how to make this code work for me...that my size of photos automatically will size to 300x300 without changing the aspect radio...Can you be able to paste the working code, if possible?
0

Instead of newWidth, use the passed in parameter: width.
0

Author Commented:
what do you mean? use like that? instead of width.. I am totally confused here

int newHeight = originalImage.Height * (width / originalImage.Width);
0

Author Commented:
or like this?

int newHeight = originalImage.Height * (300 / originalImage.Width);
0

Author Commented:
that is not working..
0

Author Commented:
PeteEngineer, couldnt even get your code working either.. it complians about Size, saying are you missing  references...
0

Commented:
Try this method:
``````void ResizeImage(String InputFileName, Int32 MaxWidth, Int32 MaxHeight, String ThumbnailFileName)
{
using (MemoryStream ms = new MemoryStream())
{
Int32 NewWidth = 300;
Int32 NewHeight = -1;

#region Resize
using (System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(InputFileName))
{
if (FullsizeImage.Width <= NewWidth)
NewWidth = FullsizeImage.Width;

NewHeight = FullsizeImage.Height * NewWidth / FullsizeImage.Width;
if (NewHeight > MaxHeight)
{
NewWidth = FullsizeImage.Width * MaxHeight / FullsizeImage.Height;
NewHeight = MaxHeight;
}

// Save resized picture
using (System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero))
NewImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
}
#endregion

ms.Position = 0;

#region Write thumbnail file
if (!Directory.Exists(Path.GetDirectoryName(ThumbnailFileName)))
Directory.CreateDirectory(Path.GetDirectoryName(ThumbnailFileName));
FileInfo fi = new FileInfo(ThumbnailFileName);
File.WriteAllBytes(ThumbnailFileName, ms.GetBuffer());
#endregion
}
}
``````

Regards.
0

Author Commented:
thank you for replying, but I am really getting this figure it out based on that code I posted... if this is possible can you paste the working code, cause I am not succesfull on getting it working yet...
0

This is the code using the width parameter that is passed into the function.
If this does not work and errors out, provide the error message. If the image does not display correctly, provide a screen capture and explain why it isn't working (i.e. how is the image distorted).
``````public void CreateThumb(string fileName, System.IO.Stream imageStream, int width, int height)
{
System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
using (Bitmap originalImage = new Bitmap(imageStream))
{
int newHeight = originalImage.Height * (width / originalImage.Width);
using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, newHeight, thumbnailImageAbortDelegate, IntPtr.Zero))
{
thumbnail.Save(fileName);
}
}
}
``````
0

Author Commented:
using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, newHeight, thumbnailImageAbortDelegate, IntPtr.Zero))

this line gives error saying Out of Memory..

when I debugged I see new height = 0
0

Author Commented:
I no longer need this questions answer... Thanks for all the efforts to all!!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.