-
//
-
// UIImage-Extensions.h
-
//
-
// Created by Hardy Macia on 7/1/09.
-
// Copyright 2009 Ca*****ount Software. All rights reserved.
-
//
-
#import <Foundation/Foundation.h>
-
@interface UIImage (CS_Extensions)
-
- (UIImage *)imageAtRect:(CGRect)rect;
-
- (UIImage *)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize;
-
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize;
-
- (UIImage *)imageByScalingToSize:(CGSize)targetSize;
-
- (UIImage *)imageRotatedByRadians:(CGFloat)radians;
-
- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees;
- @end;
-
//
-
// UIImage-Extensions.m
-
//
-
// Created by Hardy Macia on 7/1/09.
-
// Copyright 2009 Ca*****ount Software. All rights reserved.
-
//
-
#import "UIImage-Extensions.h"
-
CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};
-
CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;};
-
@implementation UIImage (CS_Extensions)
-
-(UIImage *)imageAtRect:(CGRect)rect
-
{
-
-
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect);
-
UIImage* subImage = [UIImage imageWithCGImage: imageRef];
-
CGImageRelease(imageRef);
-
-
return subImage;
-
-
}
-
- (UIImage *)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize {
-
-
UIImage *sourceImage = self;
-
UIImage *newImage = nil;
-
-
CGSize imageSize = sourceImage.size;
-
CGFloat width = imageSize.width;
-
CGFloat height = imageSize.height;
-
-
CGFloat targetWidth = targetSize.width;
-
CGFloat targetHeight = targetSize.height;
-
-
CGFloat scaleFactor = 0.0;
-
CGFloat scaledWidth = targetWidth;
-
CGFloat scaledHeight = targetHeight;
-
-
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
-
-
if (CGSizeEqualToSize(imageSize, targetSize) == NO) {
-
-
CGFloat widthFactor = targetWidth / width;
-
CGFloat 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.5;
-
} else if (widthFactor < heightFactor) {
-
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
-
}
-
}
-
-
-
// this is actually the interesting part:
-
-
UIGraphicsBeginImageContext(targetSize);
-
-
CGRect thumbnailRect = CGRectZero;
-
thumbnailRect.origin = thumbnailPoint;
-
thumbnailRect.size.width = scaledWidth;
-
thumbnailRect.size.height = scaledHeight;
-
-
[sourceImage drawInRect:thumbnailRect];
-
-
newImage = UIGraphicsGetImageFromCurrentImageContext();
-
UIGraphicsEndImageContext();
-
-
if(newImage == nil) NSLog(@"could not scale image");
-
-
-
return newImage ;
-
}
-
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {
-
-
UIImage *sourceImage = self;
-
UIImage *newImage = nil;
-
-
CGSize imageSize = sourceImage.size;
-
CGFloat width = imageSize.width;
-
CGFloat height = imageSize.height;
-
-
CGFloat targetWidth = targetSize.width;
-
CGFloat targetHeight = targetSize.height;
-
-
CGFloat scaleFactor = 0.0;
-
CGFloat scaledWidth = targetWidth;
-
CGFloat scaledHeight = targetHeight;
-
-
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
-
-
if (CGSizeEqualToSize(imageSize, targetSize) == NO) {
-
-
CGFloat widthFactor = targetWidth / width;
-
CGFloat 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.5;
-
} else if (widthFactor > heightFactor) {
-
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
-
}
-
}
-
-
-
// this is actually the interesting part:
-
-
UIGraphicsBeginImageContext(targetSize);
-
-
CGRect thumbnailRect = CGRectZero;
-
thumbnailRect.origin = thumbnailPoint;
-
thumbnailRect.size.width = scaledWidth;
-
thumbnailRect.size.height = scaledHeight;
-
-
[sourceImage drawInRect:thumbnailRect];
-
-
newImage = UIGraphicsGetImageFromCurrentImageContext();
-
UIGraphicsEndImageContext();
-
-
if(newImage == nil) NSLog(@"could not scale image");
-
-
-
return newImage ;
-
}
-
- (UIImage *)imageByScalingToSize:(CGSize)targetSize {
-
-
UIImage *sourceImage = self;
-
UIImage *newImage = nil;
-
-
// CGSize imageSize = sourceImage.size;
-
// CGFloat width = imageSize.width;
-
// CGFloat height = imageSize.height;
-
-
CGFloat targetWidth = targetSize.width;
-
CGFloat targetHeight = targetSize.height;
-
-
// CGFloat scaleFactor = 0.0;
-
CGFloat scaledWidth = targetWidth;
-
CGFloat scaledHeight = targetHeight;
-
-
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
-
-
// this is actually the interesting part:
-
-
UIGraphicsBeginImageContext(targetSize);
-
-
CGRect thumbnailRect = CGRectZero;
-
thumbnailRect.origin = thumbnailPoint;
-
thumbnailRect.size.width = scaledWidth;
-
thumbnailRect.size.height = scaledHeight;
-
-
[sourceImage drawInRect:thumbnailRect];
-
-
newImage = UIGraphicsGetImageFromCurrentImageContext();
-
UIGraphicsEndImageContext();
-
-
if(newImage == nil) NSLog(@"could not scale image");
-
-
-
return newImage ;
-
}
-
- (UIImage *)imageRotatedByRadians:(CGFloat)radians
-
{
-
return [self imageRotatedByDegrees:RadiansToDegrees(radians)];
-
}
-
- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees
-
{
-
// calculate the size of the rotated view's containing box for our drawing space
-
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
-
CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees));
-
rotatedViewBox.transform = t;
-
CGSize rotatedSize = rotatedViewBox.frame.size;
-
[rotatedViewBox release];
-
-
// Create the bitmap context
-
UIGraphicsBeginImageContext(rotatedSize);
-
CGContextRef bitmap = UIGraphicsGetCurrentContext();
-
-
// Move the origin to the middle of the image so we will rotate and scale around the center.
-
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
-
-
// // Rotate the image context
-
CGContextRotateCTM(bitmap, DegreesToRadians(degrees));
-
-
// Now, draw the rotated/scaled image into the context
-
CGContextScaleCTM(bitmap, 1.0, -1.0);
-
CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);
-
-
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
-
UIGraphicsEndImageContext();
-
return newImage;
-
-
}
- @end;