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

resize image

http://www.telerik.com/community/forums/aspnet/upload/how-to-resize-image.aspx

I have this link but on that I can't keep same aspect ratio same. What I need to do?
0
1jaws
Asked:
1jaws
4 Solutions
 
Shaun KlineLead Software EngineerCommented:
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
 
1jawsAuthor Commented:
thank you for replying.. is it possible to show that how I might be able to do that?
0
 
PeteEngineerCommented:

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;
            }

Open in new window

0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

 
1jawsAuthor 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)  
{  
    Telerik.WebControls.UploadedFile file = RadUpload1.UploadedFiles[0];  
    string targetFolder = "c:\\temp\\";  
    string suffix = "_thumb";  
    CreateThumb(  
            targetFolder +   
            string.Concat(file.GetNameWithoutExtension(), suffix, file.GetExtension()), file.InputStream,  
            300,   300);  
}

Open in new window

0
 
Shaun KlineLead Software EngineerCommented:
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);  
        }  
    }  
}

Open in new window

0
 
1jawsAuthor Commented:
says newWidth doest exist in the context
0
 
1jawsAuthor Commented:
int newWidth = originalImage.Width;
0
 
1jawsAuthor Commented:
I put above didnt work...
0
 
1jawsAuthor 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
 
Shaun KlineLead Software EngineerCommented:
Instead of newWidth, use the passed in parameter: width.
0
 
1jawsAuthor Commented:
what do you mean? use like that? instead of width.. I am totally confused here

int newHeight = originalImage.Height * (width / originalImage.Width);
0
 
1jawsAuthor Commented:
or like this?

int newHeight = originalImage.Height * (300 / originalImage.Width);
0
 
1jawsAuthor Commented:
that is not working..
0
 
1jawsAuthor Commented:
PeteEngineer, couldnt even get your code working either.. it complians about Size, saying are you missing  references...
0
 
jonnidipCommented:
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)
                    {
                        // Resize with height instead
                        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
            }
        }

Open in new window


Regards.
0
 
1jawsAuthor 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
 
Shaun KlineLead Software EngineerCommented:
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);  
        }  
    }  
}

Open in new window

0
 
1jawsAuthor 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
 
1jawsAuthor 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.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now