Carrés miniature de UIImagePickerViewController image

Dans mon application, l'utilisateur sélectionne une image ou prenez une photo à l'aide de UIImagePickerViewController. Une fois que l'image a été sélectionnée je veux afficher sa vignette sur un carré UIImageView (90x90).

Je suis en utilisant Apple code pour créer une vignette. Le problème est que la vignette n'est pas carré, la fonction, après l'kCGImageSourceThumbnailMaxPixelSize clé à 90, semble uniquement pour redimensionner la hauteur de l'image, et autant que je sache, le kCGImageSourceThumbnailMaxPixelSize clé doit être responsable pour le réglage de la hauteur et la largeur de la miniature.

Voici un aperçu de mon code:

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
NSData *imageData = UIImageJPEGRepresentation (image, 0.5);
//My image view is 90x90
UIImage *thumbImage = MyCreateThumbnailImageFromData(imageData, 90);
[myImageView setImage:thumbImage];
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
UIImage* MyCreateThumbnailImageFromData (NSData * data, int imageSize) {
CGImageRef        myThumbnailImage = NULL;
CGImageSourceRef  myImageSource;
CFDictionaryRef   myOptions = NULL;
CFStringRef       myKeys[3];
CFTypeRef         myValues[3];
CFNumberRef       thumbnailSize;
//Create an image source from NSData; no options.
myImageSource = CGImageSourceCreateWithData((__bridge CFDataRef)data,
NULL);
//Make sure the image source exists before continuing.
if (myImageSource == NULL){
fprintf(stderr, "Image source is NULL.");
return  NULL;
}
//Package the integer as a  CFNumber object. Using CFTypes allows you
//to more easily create the options dictionary later.
thumbnailSize = CFNumberCreate(NULL, kCFNumberIntType, &imageSize);
//Set up the thumbnail options.
myKeys[0] = kCGImageSourceCreateThumbnailWithTransform;
myValues[0] = (CFTypeRef)kCFBooleanTrue;
myKeys[1] = kCGImageSourceCreateThumbnailFromImageIfAbsent;
myValues[1] = (CFTypeRef)kCFBooleanTrue;
myKeys[2] = kCGImageSourceThumbnailMaxPixelSize;
myValues[2] = thumbnailSize;
myOptions = CFDictionaryCreate(NULL, (const void **) myKeys,
(const void **) myValues, 2,
&kCFTypeDictionaryKeyCallBacks,
& kCFTypeDictionaryValueCallBacks);
//Create the thumbnail image using the specified options.
myThumbnailImage = CGImageSourceCreateThumbnailAtIndex(myImageSource,
0,
myOptions);
UIImage* scaled = [UIImage imageWithCGImage:myThumbnailImage];
//Release the options dictionary and the image source
//when you no longer need them.
CFRelease(thumbnailSize);
CFRelease(myOptions);
CFRelease(myImageSource);
//Make sure the thumbnail image exists before continuing.
if (myThumbnailImage == NULL) {
fprintf(stderr, "Thumbnail image not created from image source.");
return NULL;
}
return scaled;
}

Et ce comment mon affichage de l'image est instancié:

myImageView = [[UIImageView alloc] init];
imageView.contentMode = UIViewContentModeScaleAspectFit;
CGRect rect = imageView.frame;
rect.size.height = 90;
rect.size.width = 90;
imageView.frame = rect;
[imageView setUserInteractionEnabled:YES];

Si je n'ai pas mis imageView.contentMode = UIViewContentModeScaleAspectFit; la vignette sera faussée, puisque c'est juste une version de mon image d'origine avec une hauteur de 90 pixels.

Alors, pourquoi est ma vignette pas carré?

Remarque - une Méta utilisateur n'ayant aucune connaissance de l'iOS éditée à l'écart des super-pratique du code de Intelligent de réponse ci-dessous. si vous êtes réellement la programmation et de la réelle voulez une réponse utile et à utiliser Intelligent (spectaculaire) idées, il suffit de cliquer sur "édition" bouton ci-dessous, vous allez voir l'histoire et peut couper, coller, et de l'envoyer à l'app store 🙂
Je ne vois pas ce code dans le modifier l'histoire de Clever Erreur de réponse.
stackoverflow.com/posts/17884863/revisions rev "5"

OriginalL'auteur douglasd3 | 2013-07-26