J'ai une application qui permet à l'utilisateur de sélectionner une image à partir d'une caméra ou d'une photothèque. Il place ensuite cette image dans un ImageView. J'utilise ensuite Quartz pour saisir l'image de cette vue d'image et la restituer avec quelques superpositions de base, etc.Image d'étirement à quartz sélectionnée à partir de imagePickerController
Le problème est que lorsque l'image est prise sur l'appareil photo, ou à partir de l'appareil photo, Quartz dessine l'image avec une rotation de 90 degrés et étire l'image verticalement. Il n'y a aucun problème lors de la sélection d'une autre photo de la photothèque. Et le problème ne se produit pas si allowImageEditing est défini sur YES.
Si quelqu'un peut jeter de la lumière ce serait utile, je suis un débutant relative à cela.
code dans mon 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];
}
code dans la vue qui attire le quartz
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);