How to resize NSImage?

前端 未结 10 1645
萌比男神i
萌比男神i 2020-12-02 21:21

I have an NSBitmapImageRep which is WxH size.

I create NSImage and call addRepresentation:. Then I n

10条回答
  •  無奈伤痛
    2020-12-02 21:29

    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:NSCompositeCopy fraction:1.0];
            [smallImage unlockFocus];
            return smallImage;
        }
        return nil;
    }
    

提交回复
热议问题