Hotspot в Windows курсор.cur загружен NSImage?
В соответствии с документацией Cocoa Drawing Guide для изображений, NSImage может загрузить файл курсора Windows.cur.
Но как мне получить точку доступа, необходимую для NSCursor - initWithImage:(NSImage *)newImage hotSpot:(NSPoint)point;
?
1 ответ
Решение
Как сказано в документации,
В OS X v10.4 и позже,
NSImage
поддерживает множество дополнительных форматов файлов, используя платформу Image I/O.
Итак, давайте возьмем образец файла курсора и поэкспериментируем на игровой площадке Swift:
import Foundation
import ImageIO
let url = Bundle.main.url(forResource: "BUSY_L", withExtension: "CUR")! as CFURL
let source = CGImageSourceCreateWithURL(url, nil)!
print(CGImageSourceCopyPropertiesAtIndex(source, 0, nil)!)
Выход:
{
ColorModel = RGB;
Depth = 8;
HasAlpha = 1;
IsIndexed = 1;
PixelHeight = 32;
PixelWidth = 32;
ProfileName = "sRGB IEC61966-2.1";
hotspotX = 16;
hotspotY = 16;
}
Итак, чтобы получить точку доступа безопасно:
import Foundation
import ImageIO
if let url = Bundle.main.url(forResource: "BUSY_L", withExtension: "CUR") as CFURL?,
let source = CGImageSourceCreateWithURL(url, nil),
let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [String: Any],
let x = properties["hotspotX"] as? CGFloat,
let y = properties["hotspotY"] as? CGFloat
{
let hotspot = CGPoint(x: x, y: y)
print(hotspot)
}
Выход:
(16.0, 16.0)