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
код, который я перевел: