UIGraphicsBeginImageContextWithOptions аналог в macOS - PullRequest
0 голосов
/ 05 мая 2018

Вот код, который я использую для масштабирования изображений в 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 Ответ

0 голосов
/ 13 мая 2018

После некоторого поиска я нашел вопрос, похожий на мой, но в 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 код, который я перевел:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...