Skip to main content

UIImage ScaleToFit

By July 24, 2012December 18th, 2013Blog

Sometimes the image provided by the UIImagePicker is not the right size, and putting it to the UIImageView is not enough as we do need to know the size it was being fit to.

 


Let’s cut the chase, here is the code:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public static class UIImageUtils
{
///
///
///
///
/// A
///
public static UIImage ScaleToFit(UIImage sourceImage, System.Drawing.SizeF targetSize)
{
UIImage newImage;
 
SizeF imageSize = sourceImage.Size;
float width = imageSize.Width;
float height = imageSize.Height;
 
float targetWidth = targetSize.Width;
float targetHeight = targetSize.Height;
 
float scaleFactor = 0f;
float scaledWidth = targetWidth;
float scaledHeight = targetHeight;
 
PointF thumbnailPoint = new PointF(0, 0);
 
if (imageSize != targetSize)
{
float widthFactor = targetWidth / width;
float heightFactor = targetHeight / height;
 
if (widthFactor < heightFactor)
scaleFactor = widthFactor;
else
scaleFactor = heightFactor;
 
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
 
// center the image
 
if (widthFactor < heightFactor)
{
thumbnailPoint.Y = (targetHeight - scaledHeight) * 0.5f;
}
else if (widthFactor > heightFactor)
{
thumbnailPoint.X = (targetWidth - scaledWidth) * 0.5f;
}
}
 
RectangleF thumbnailRect = new RectangleF(new PointF(0, 0), new SizeF(scaledWidth, scaledHeight));
 
UIGraphics.BeginImageContext(thumbnailRect.Size);
 
sourceImage.Draw(thumbnailRect);
 
newImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
 
return newImage;
}
}

Hope this helps.

Happy coding!