Nella mia app l'utente seleziona un'immagine o scatta una foto usando UIImagePickerViewController. Una volta selezionata l'immagine, voglio visualizzare la sua miniatura su un UIImageView quadrato (90x90).Miniatura quadrata da UIImagePickerViewController image
Sto usando Apple's code per creare una miniatura. Il problema è che la miniatura non è quadrata, la funzione, dopo aver impostato la chiave kCGImageSourceThumbnailMaxPixelSize a 90, sembra solo ridimensionare l'altezza dell'immagine e, per quanto ne so, la chiave kCGImageSourceThumbnailMaxPixelSize dovrebbe essere responsabile dell'impostazione dell'altezza e della larghezza della miniatura.
Ecco un assaggio del mio codice:
- (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;
}
E questo come mio punto di vista dell'immagine è istanziato:
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];
Se non metto imageView.contentMode = UIViewContentModeScaleAspectFit;
sarà distorto la miniatura, dal momento che è solo una versione della mia immagine originale con altezza di 90 pixel.
Quindi, perché la mia miniatura non è al quadrato?
Nota - un utente Meta con nessuna conoscenza di iOS modificato via un po 'di codice super-utile dalla risposta di Clever in basso. se in realtà stai programmando e vuoi una risposta utile e vuoi veramente usare le idee (spettacolari) di Clever, fai clic sul pulsante "modificato" in basso, visualizzerai la cronologia e puoi tagliare, incollare e inviare all'app store:) – Fattie
@JoeBlow Non vedo alcun codice rimosso nella [modifica cronologia] (http://stackoverflow.com/posts/17884863/revisions) della risposta di Clever Error. – cpburnz
http://stackoverflow.com/posts/17884863/revisions rev "5" – Fattie