2009-05-15 4 views
0

J'écris du code pour utiliser UIImagePickerController. Corey précédemment publié some nice sample code on SO liés à la culture et la mise à l'échelle. Cependant, il n'a pas d'implémentations de cropImage: to: andScaleTo: ni straightenAndScaleImage().Implémentation existante de cropImage: à: andScaleTo: et straightenAndScaleImage()?

Voilà comment ils sont utilisés:

newImage = [self cropImage:originalImage to:croppingRect andScaleTo:scaledImageSize]; 
... 
UIImage *rotatedImage = straightenAndScaleImage([editInfo objectForKey:UIImagePickerControllerOriginalImage], scaleSize); 

Depuis que je suis sûr que quelqu'un doit utiliser quelque chose de très similaire à l'exemple de code de Corey, il y a probablement une implémentation existante de ces deux fonctions. Est-ce que quelqu'un aimerait partager?

+0

Heureusement, je Breezing par de nouvelles questions ce soir .... Dans le futur, vous pouvez commenter une précédente réponse/question et je vais voir –

+0

Remerciez toi! À l'époque, je n'avais pas assez de réputation pour commenter. En outre, j'ai pensé que c'était une question légèrement différente, et pourrait donc être posée séparément. – Elliot

Répondre

1

Si vous consultez le post auquel vous avez un lien, vous verrez un lien vers les forums apple dev où j'ai reçu un peu de ce code, voici les méthodes que vous demandez. Note: J'ai peut-être fait quelques changements concernant les types de données, mais je ne m'en souviens pas très bien. Il devrait être trivial pour vous d'ajuster si nécessaire.

- (UIImage *)cropImage:(UIImage *)image to:(CGRect)cropRect andScaleTo:(CGSize)size { 
UIGraphicsBeginImageContext(size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGImageRef subImage = CGImageCreateWithImageInRect([image CGImage], cropRect); 
CGRect myRect = CGRectMake(0.0f, 0.0f, size.width, size.height); 
CGContextScaleCTM(context, 1.0f, -1.0f); 
CGContextTranslateCTM(context, 0.0f, -size.height); 
CGContextDrawImage(context, myRect, subImage); 
UIImage* croppedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
CGImageRelease(subImage); 
return croppedImage; 

}

UIImage *straightenAndScaleImage(UIImage *image, int maxDimension) { 

CGImageRef img = [image CGImage]; 
CGFloat width = CGImageGetWidth(img); 
CGFloat height = CGImageGetHeight(img); 
CGRect bounds = CGRectMake(0, 0, width, height); 
CGSize size = bounds.size; 
if (width > maxDimension || height > maxDimension) { 
    CGFloat ratio = width/height; 
    if (ratio > 1.0f) { 
     size.width = maxDimension; 
     size.height = size.width/ratio; 
    } 
    else { 
     size.height = maxDimension; 
     size.width = size.height * ratio; 
    } 
} 

CGFloat scale = size.width/width; 
CGAffineTransform transform = orientationTransformForImage(image, &size); 
UIGraphicsBeginImageContext(size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
// Flip 
UIImageOrientation orientation = [image imageOrientation]; 
if (orientation == UIImageOrientationRight || orientation == UIImageOrientationLeft) { 

    CGContextScaleCTM(context, -scale, scale); 
    CGContextTranslateCTM(context, -height, 0); 
}else { 
    CGContextScaleCTM(context, scale, -scale); 
    CGContextTranslateCTM(context, 0, -height); 
} 
CGContextConcatCTM(context, transform); 
CGContextDrawImage(context, bounds, img); 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 

}

Questions connexes