NSImage chargement de la miniature
GG
Membre
Voici une fonction pour charger uniquement la miniature et pas la totalité de l'image en mémoire :
voilou et bon weekend
<br />-(NSImage*)loadThumbnail:(NSString*)filepath {<br /> CGImageSourceRef imageSource;<br /> if ( nil == filepath ) <br /> return nil;<br /><br /> NSURL* imageUrl = [[NSURL alloc]initFileURLWithPath:filepath];<br /><br /> imageSource = CGImageSourceCreateWithURL((CFURLRef)imageUrl, NULL);<br /> if ( NULL == imageSource ) <br /> return nil;<br /> CFStringRef imageSourceType = CGImageSourceGetType(imageSource);<br /> if ( NULL == imageSourceType ) {<br /> CFRelease(imageSource);<br /> return nil;<br /> }<br /><br /> NSImage *image;<br /> NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:<br /> [NSNumber numberWithBool:YES], (NSString *)kCGImageSourceCreateThumbnailFromImageIfAbsent,<br /> [NSNumber numberWithInt:160], (NSString *)kCGImageSourceThumbnailMaxPixelSize,<br /> nil];<br /> CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (CFDictionaryRef)options);<br /> NSRect imageRect = NSMakeRect(0.0, 0.0, 0.0, 0.0);<br /> CGContextRef imageContext = nil;<br /><br /> imageRect.size.height = CGImageGetHeight(thumbnail);<br /> imageRect.size.width = CGImageGetWidth(thumbnail);<br /> <br /><br /> if ( imageRect.size.height == 0.0 || imageRect.size.width == 0.0 ) {<br /> [options release];<br /> CFRelease(imageSourceType);<br /> CFRelease(imageSource);<br /> [imageUrl release];<br /> return nil;<br /><br /> }<br /> image = [[NSImage alloc]initWithSize:imageRect.size];<br /> [image lockFocus];<br /> imageContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];<br /> if ( NULL == imageContext ) {<br /> [image release];<br /> CFRelease(thumbnail);<br /> [options release];<br /> CFRelease(imageSourceType);<br /> CFRelease(imageSource);<br /> [imageUrl release];<br /> return nil;<br /> }<br /> CGContextDrawImage(imageContext, *(CGRect*)&imageRect, thumbnail);<br /> if ( nil == image ) {<br /> [image release];<br /> CFRelease(thumbnail);<br /> [options release];<br /> CFRelease(imageSourceType);<br /> CFRelease(imageSource);<br /> [imageUrl release];<br /> return nil;<br /> }<br /> [image unlockFocus];<br /> [options release];<br /> CFRelease(thumbnail);<br /> CFRelease(imageSourceType);<br /> CFRelease(imageSource);<br /> [imageUrl release];<br /> return image;<br />}<br /><br />
voilou et bon weekend
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
http://developer.apple.com/documentation/GraphicsImaging/Reference/CGImageSource/Reference/reference.html
CGImageSourceCreateThumbnailAtIndex
PS :
ça fait bizarre ça :
En plus, ce test je l'aurais fait avant de dessiner dedans, parce que là on risque de se retrouver avec la vignette dessinée n'importe où
(et j'aurais mis un "autorelease" à la fin...)
Est très bizarre, envoyé un message "release" à un objet qu'on sait nil, ne sert à rien