I've created a custom NSView that displays an image and allows the
user to zoom in and out.  The view works in general, but the quality
of the image displayed is not what I expect.  When I zoom in even
slightly on a high resolution image (300 dpi, 500x500) the image is
grainy and pixelated.  If I do the same in Preview the quality is much
better.

I read in the image (a JPEG) using:

        image = [[NSImage alloc] initWithContentsOfURL:url];

I keep a scale factor called imageScale (default 1.0) and draw the
image as follows :

        [[NSGraphicsContext currentContext] setImageInterpolation:
NSImageInterpolationHigh];
        
        NSSize viewSize  = [self bounds].size;
        NSSize imageSize = [image size];
        NSAffineTransform* at = [NSAffineTransform transform];
        [at scaleBy:imageScale];
        imageSize = [at transformSize:imageSize];

        NSPoint viewCenter;
        viewCenter.x = viewSize.width  * 0.50;
        viewCenter.y = viewSize.height * 0.50;

        NSPoint imageOrigin = viewCenter;
        imageOrigin.x -= imageSize.width  * 0.50;
        imageOrigin.y -= imageSize.height * 0.50;

        NSRect destRect;
        destRect.origin = imageOrigin;
        destRect.size = imageSize;
        
        [image drawInRect:destRect
                                fromRect:NSZeroRect
                                operation:NSCompositeSourceOver
                                fraction:1.0];

I've tried adjusting the NSScale by hand rather than using the
transform, no change.  I also tried subclassing an IKImageView.  Using
its built in zoom worked ok but I can't draw NSBezierPaths over the
top which I also need for this subclass.  Can anyone see what I'm
doing wrong, or suggest a better method?

Thanks,
-Matthew
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to