discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Cropping an NSImage


From: Vaisburd, Haim
Subject: RE: Cropping an NSImage
Date: Mon, 2 May 2005 10:45:42 -0700

Moonlite <unixshepherd@wanadoo.fr> wrote:

> I'd like to crop an image, and get another NSImage containing the selected
> rectangle from the source image.
> 
> i tried :
> 
> - (NSImage *) imageFromRect: (NSRect) rect
> {
>     NSImage * canvas = [[NSImage alloc] initWithSize: rect.size];
>       
>     [ canvas setSize: rect.size ];
>     [ canvas lockFocus ];
>
>     [self compositeToPoint: NSZeroPoint
>           fromRect: rect
>           operation: NSCompositeCopy];
>
>     [ canvas unlockFocus ];
>     return [canvas autorelease];
>    
> }
> 
> but it didn't work. Can someone tell me how to do it?

Hi, 

I was able to crop using NSImageRep (see below). I remember having problems
with [NSImage -compositeToPoint:], but I do not remember the nature of the 
problem and
the reason. Here is the code that works for me:

In a category:

@implementation NSImage (PhotoClip)

- (NSImage *) imageFromRect: (NSRect) rect
{
    NSAffineTransform * xform = [NSAffineTransform transform];

    // translate reference frame to map rectangle 'rect' into first quadrant
    [xform translateXBy: -rect.origin.x
                    yBy: -rect.origin.y];
    
    NSSize canvas_size = [xform transformSize: rect.size];

    NSImage * canvas = [[NSImage alloc] initWithSize: canvas_size];
    [canvas lockFocus];

    [xform concat];
    
    // Get NSImageRep of image
    NSImageRep * rep = [self bestRepresentationForDevice: nil];

    [rep drawAtPoint: NSZeroPoint];
    
    [canvas unlockFocus];
    return [canvas autorelease];
}

@end

I have an unfinished project with a more general method
  - (NSImage *) imageFromRect: (NSRect) rect
                     scaledBy: (float) scale
                    rotatedBy: (float) degrees
(rotation +/- 90 degrees only) at http://www.vaisburd.net/PhotoClip, you might 
want
to look at PHImage.m and PHAffineTransform.m.

Hope that helps,
Tima.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]