NSImage chargement de la miniature

GGGG Membre
Voici une fonction pour charger uniquement la miniature et pas la totalité de l'image en mémoire :

<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 =&nbsp; 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*)&amp;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 ;)

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.