UIGraphicsBeginImageContextWithOptions аналог в macOS

Вот код, который я использую для масштабирования изображений в iOS, т.е. масштабирования изображения 500x500 до изображения 100x100 и последующего сохранения масштабированной копии:

+ (UIImage *)image:(UIImage *)originalImage scaledToSize:(CGSize)desiredSize {
    UIGraphicsBeginImageContextWithOptions(desiredSize, YES, [UIScreen mainScreen].scale);
    [originalImage drawInRect:CGRectMake(0, 0, desiredSize.width, desiredSize.height)];
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext;

    return finalImage;
}

Теперь мне нужно реализовать ту же функциональность в моем приложении macOS. Как я могу это сделать? Я видел такой вопрос, но до сих пор не могу понять логику этого в macOS.

1 ответ

Решение

После некоторых поисков я нашел вопрос, похожий на мой, но в Swift, Так что я перевел это в Objective-C и это все:

+ (NSImage *)image:(NSImage *)originalImage scaledToSize:(NSSize)desiredSize {
    NSImage *newImage = [[NSImage alloc] initWithSize:desiredSize];

    [newImage lockFocus];
    [originalImage drawInRect:NSMakeRect(0, 0, desiredSize.width, desiredSize.height) fromRect:NSMakeRect(0, 0, imageWidth, imageHeight) operation:NSCompositingOperationSourceOver fraction:1];
    [newImage unlockFocus];

    newImage.size = desiredSize;
    return [[NSImage alloc] initWithData:[newImage TIFFRepresentation]];
}

Но есть еще проблема: если desiredSize = NSMakeSize(50,50); он вернет 50 на 50 пикселей. Это должно быть что-то с масштабом экрана, я думаю. Есть Swift код, который я перевел:

Другие вопросы по тегам