objective-cmacosjpegnsimage

How to resize NSImage?


I have an NSBitmapImageRep which is WxH size.

I create NSImage and call addRepresentation:. Then I need to resize the NSImage.

I tried setSize method but it doesn't work. What should I do?


Solution

  • Edit: Since this answer is still the accepted answer, but was written without Retina screens in mind, I will straight up link to a better solution further down the thread: Objective-C Swift 4


    Because the method of Paresh is totally correct but deprecated since 10.8 I'll post the working 10.8 code below. All credit to Paresh's answer though.

    - (NSImage *)imageResize:(NSImage*)anImage newSize:(NSSize)newSize {
        NSImage *sourceImage = anImage;
        [sourceImage setScalesWhenResized:YES];
        
        // Report an error if the source isn't a valid image
        if (![sourceImage isValid]){
            NSLog(@"Invalid Image");
        } else {
            NSImage *smallImage = [[NSImage alloc] initWithSize: newSize];
            [smallImage lockFocus];
            [sourceImage setSize: newSize];
            [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
            [sourceImage drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, newSize.width, newSize.height) operation:NSCompositingOperationCopy fraction:1.0];
            [smallImage unlockFocus];
            return smallImage;
        }
        return nil;
    }