2009-05-15 7 views
0

Я пишу код для использования UIImagePickerController. Кори ранее размещал some nice sample code on SO, связанный с обрезкой и масштабированием. Однако у него нет реализаций cropImage: to: andScaleTo: ни straightenAndScaleImage().Существующая реализация cropImage: to: andScaleTo: и straightenAndScaleImage()?

Вот как они используются:

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

Поскольку я уверен, что кто-то должен использовать что-то очень похожее на образец кода Кори, там, наверное, существующая реализация этих двух функций. Кто-нибудь хотел бы поделиться?

+0

К счастью, я заезжал через новые вопросы сегодня .... В будущем вы можете прокомментировать предыдущий ответ/вопрос и я буду видеть его –

+0

благодарственное вы! В то время у меня не хватило репутации для комментариев. Кроме того, я понял, что это был немного другой вопрос, и поэтому его можно было бы задать отдельно. – Elliot

ответ

1

Если вы проверили сообщение, в котором вы связались, вы увидите ссылку на форумы apple dev, где я получил часть этого кода, вот методы, о которых вы просите. Примечание. Возможно, я внес некоторые изменения в отношении типов данных, но я не могу вспомнить. Для вас должно быть тривиально, если нужно.

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

}