2009-05-15 7 views
0

Ich schreibe Code, um UIImagePickerController zu verwenden. Corey hat zuvor some nice sample code on SO zum Zuschneiden und Skalieren gepostet. Es hat jedoch keine Implementierungen von cropImage: to: andScaleTo: noch straightenAndScaleImage().Vorhandene Implementierung von cropImage: zu: andScaleTo: und straightenAndScaleImage()?

Hier ist, wie sie es gewohnt sind:

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

Da ich sicher bin, muss jemand etwas sehr ähnlich Corey Beispielcode verwenden, gibt es wahrscheinlich eine bestehende Implementierung dieser beiden Funktionen. Möchte jemand teilen?

+0

Zum Glück habe ich durch neue Fragen wurde breezing heute Abend .... In der Zukunft werden Sie auf einer früheren Antwort/Frage äußern kann, und ich werde es –

+0

Thank sehen Sie! Zu der Zeit hatte ich nicht genug Ruf, um zu kommentieren. Außerdem dachte ich, dass es eine etwas andere Frage war und somit getrennt gestellt werden könnte. – Elliot

Antwort

1

Wenn Sie den Beitrag sehen, mit dem Sie verbunden sind, sehen Sie einen Link zu den Apple Dev-Foren, wo ich etwas von diesem Code habe, hier sind die Methoden, nach denen Sie fragen. Hinweis: Möglicherweise habe ich einige Änderungen in Bezug auf Datentypen vorgenommen, aber ich kann mich nicht mehr genau erinnern. Es sollte für Sie trivial sein, bei Bedarf Anpassungen vorzunehmen.

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

}