FROM : Yann Bizeul
DATE : Thu Nov 25 15:32:50 2004
> So to improve it, I'm looking at Cocoa functions and it seems possible
> to draw the image at different sizes. I guess I could use Quartz to
> draw to an offscreen image?? Then access that image.
> Before going down that path, any simpler / better
> suggestions...something like producing a resized bitmap directly from
> the original one...
Here is a code I use to resample an image, it produces good quality
thumbnails.
This is adapted from a sample found somewhere in the archives.
=== CUT HERE ===
NSSize thumbSize = NSMakeSize(200,200);
NSImage *tiff = [[NSImage alloc]initWithContentsOfFile:[self
valueForKey:@"file"]];
float bigRatio = [tiff size].width / [tiff size].height;
float thumbRatio = thumbSize.width / thumbSize.height;
NSSize smallSize;
if (bigRatio > thumbRatio)
smallSize = NSMakeSize(thumbSize.width,thumbSize.width/bigRatio);
else
smallSize = NSMakeSize(thumbSize.height*bigRatio,thumbSize.height);
NSBitmapImageRep *imageRepA = [[tiff
representations]objectAtIndex:0];
NSBitmapImageRep *imageRep = [imageRepA representationWithSize:
smallSize];
NSDictionary *properties = [NSDictionary dictionaryWithObject:
[NSNumber numberWithFloat: 1.0] forKey: NSImageCompressionFactor];
[[imageRep representationUsingType:NSJPEGFileType
properties:properties]writeToFile:outJPEGFile atomically:YES];
=== CUT HERE ===
This rely on a NSBitmapImageRep category :
------------------------------------------
=== CUT HERE ===
@implementation NSBitmapImageRep (Sizing)
- (NSBitmapImageRep *)representationWithSize:(NSSize)size
{
NSRect rect = NSMakeRect(0, 0, size.width, size.height);
NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease];
NSBitmapImageRep *outRep;
[image lockFocus];
[[NSGraphicsContext
currentContext]setImageInterpolation:NSImageInterpolationHigh];
[self drawInRect:rect];
outRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:rect]
autorelease];
[image unlockFocus];
return outRep;
}
@end
=== CUT HERE ===
--
Yann Bizeul - yann at tynsoe.org
Please use this e-mail when writing to me.
You can visit my projects at this address :
http://projects.tynsoe.org/
(BuddyPop - GeekTool - SSH Tunnel Manager...)
DATE : Thu Nov 25 15:32:50 2004
> So to improve it, I'm looking at Cocoa functions and it seems possible
> to draw the image at different sizes. I guess I could use Quartz to
> draw to an offscreen image?? Then access that image.
> Before going down that path, any simpler / better
> suggestions...something like producing a resized bitmap directly from
> the original one...
Here is a code I use to resample an image, it produces good quality
thumbnails.
This is adapted from a sample found somewhere in the archives.
=== CUT HERE ===
NSSize thumbSize = NSMakeSize(200,200);
NSImage *tiff = [[NSImage alloc]initWithContentsOfFile:[self
valueForKey:@"file"]];
float bigRatio = [tiff size].width / [tiff size].height;
float thumbRatio = thumbSize.width / thumbSize.height;
NSSize smallSize;
if (bigRatio > thumbRatio)
smallSize = NSMakeSize(thumbSize.width,thumbSize.width/bigRatio);
else
smallSize = NSMakeSize(thumbSize.height*bigRatio,thumbSize.height);
NSBitmapImageRep *imageRepA = [[tiff
representations]objectAtIndex:0];
NSBitmapImageRep *imageRep = [imageRepA representationWithSize:
smallSize];
NSDictionary *properties = [NSDictionary dictionaryWithObject:
[NSNumber numberWithFloat: 1.0] forKey: NSImageCompressionFactor];
[[imageRep representationUsingType:NSJPEGFileType
properties:properties]writeToFile:outJPEGFile atomically:YES];
=== CUT HERE ===
This rely on a NSBitmapImageRep category :
------------------------------------------
=== CUT HERE ===
@implementation NSBitmapImageRep (Sizing)
- (NSBitmapImageRep *)representationWithSize:(NSSize)size
{
NSRect rect = NSMakeRect(0, 0, size.width, size.height);
NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease];
NSBitmapImageRep *outRep;
[image lockFocus];
[[NSGraphicsContext
currentContext]setImageInterpolation:NSImageInterpolationHigh];
[self drawInRect:rect];
outRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:rect]
autorelease];
[image unlockFocus];
return outRep;
}
@end
=== CUT HERE ===
--
Yann Bizeul - yann at tynsoe.org
Please use this e-mail when writing to me.
You can visit my projects at this address :
http://projects.tynsoe.org/
(BuddyPop - GeekTool - SSH Tunnel Manager...)
| Related mails | Author | Date |
|---|---|---|
| John Wood | Nov 24, 13:13 | |
| Yann Bizeul | Nov 25, 15:32 |






Cocoa mail archive

