У меня есть приложение, которое позволяет пользователю выбирать изображение из камеры или библиотеки фотографий. Затем он помещает это изображение в ImageView. Затем я использую Quartz для захвата изображения из этого изображения и визуализации его вместе с некоторыми базовыми наложениями и т. Д.
Проблема заключается в том, что при съемке изображения с камеры или рулона камеры Кварц рисует изображение с поворотом на 90 градусов и растягивает изображение по вертикали.
При выборе любой другой фотографии из библиотеки фотографий проблем не возникает. И проблема не возникает, если для параметра allowImageEditing установлено значение YES.
Если кто-то может пролить немного света, это будет полезно, я относительный новичок в этом.
Код в моем CameraViewController
#pragma mark -
- (IBAction)getCameraPicture {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.navigationBar.barStyle = UIBarStyleBlackOpaque;
picker.delegate = self;
picker.allowsImageEditing = NO; //seems to fix the weird rotation & stretching issues if set to YES
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController:picker animated:YES];
//[picker release];
}
- (IBAction)selectExistingPicture {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.navigationBar.barStyle = UIBarStyleBlackOpaque;
picker.delegate = self;
picker.allowsImageEditing = NO; //seems to fix the weird rotation & stretching issues if set to YES (only with camera roll)
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
//[picker release];
}
}
#pragma mark -
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo {
imageView.image = image;
NSLog(@"imagePicker image size %.0f x %.0f", image.size.width, image.size.height);
[picker dismissModalViewControllerAnimated:YES];
[picker release];
[quartzContextView setNeedsDisplay];
[self setUpAndRenderImage];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissModalViewControllerAnimated:YES];
[picker release];
}
Код в представлении, которое рисует Кварц
NSLog(@"Quartz image size %.0f x %.0f", drawImageTwo.size.width, drawImageTwo.size.height);
if (drawImageTwo.size.width >= drawImageTwo.size.height)
{
scaleFactor = (insideHeight+5)/drawImageTwo.size.height;
xOffset = (drawImageTwo.size.width*scaleFactor - insideWidth)/2;
yOffset = 0;
NSLog(@"Image is Landscaepe");
}
else if (drawImageTwo.size.width < drawImageTwo.size.height)
{
scaleFactor = (insideWidth+5)/drawImageTwo.size.width;
yOffset = (drawImageTwo.size.height*scaleFactor - insideHeight)/2;
xOffset = 0;
NSLog(@"Image is Portrait");
}
//draw Photo Base
CGRect baseRect = CGRectMake(0.0, 0.0, width, height);
CGContextDrawImage (context, baseRect, drawImage.CGImage);
//clip all further drawing to context clip
CGContextClipToRect(context, CGRectMake(leftOffset, (height-insideHeight-topOffset), insideWidth, insideHeight));
//draw Photo
CGRect photoRect = CGRectMake(leftOffset-xOffset, (height-insideHeight-topOffset)-yOffset, drawImageTwo.size.width*scaleFactor, drawImageTwo.size.height*scaleFactor);
CGContextDrawImage (context, photoRect, drawImageTwo.CGImage);