【问题标题】:NSCollectionView Grid of Files Displayed with Icons from Finder's PreviewNSCollectionView 文件的网格显示与 Finder 预览中的图标
【发布时间】:2016-05-26 20:07:16
【问题描述】:
【问题讨论】:
标签:
swift
cocoa
nscollectionview
【解决方案1】:
更新,我能够弄清楚如何将 Finder 与 Apple 提供的 Quicklook 库一起使用。这是我使用的部分代码。请注意,如果您尝试在没有预览的文件上使用 Quicklook,则会出现错误,因此在这些情况下,我只使用了 iconForFile 函数(在此代码块下方)
let tmp = QLThumbnailImageCreate(kCFAllocatorDefault, tmpURL , CGSize(width: 64, height: 64), nil)
tmpImage = tmp.takeUnretainedValue()
tmpIcon = NSImage(CGImage: tmpImage!, size: NSSize(width: 64, height: 64))
原文:
我能够(几乎)找到我正在寻找的东西。
NSWorkspace 类中有一个方法
func iconForFile(_ fullPath: String) -> NSImage
这将返回图标的 NSImage。不幸的是,如果它是图片,我看不到获得图像预览的方法。我也看不到让图片变大的方法(只有 32x32 像素)。
希望这个答案能帮助遇到这个问题的其他人!
【解决方案2】:
我已经使用了您回答中的代码,但我注意到它没有保持文件的纵横比,低分辨率版本只是下采样的高分辨率版本。因此,根据您的回答,这是我的解决方案:
let imageLowResRef = QLThumbnailImageCreate(kCFAllocatorDefault, url as CFURL , CGSize(width: 32, height: 32), nil)
guard imageLowResRef != nil else {
return NSWorkspace.shared.icon(forFile: url.path)
}
let image = NSImage()
let imageLowRes = imageLowResRef!.takeUnretainedValue()
image.addRepresentation(NSBitmapImageRep(cgImage: imageLowRes))
let imageHighResRef = QLThumbnailImageCreate(kCFAllocatorDefault, url as CFURL , CGSize(width: imageLowRes.width*2, height: imageLowRes.height*2), nil)
let imageHighRes = imageHighResRef!.takeUnretainedValue()
image.addRepresentation(NSBitmapImageRep(cgImage: imageHighRes))
编辑:如果你添加let options = [kQLThumbnailOptionIconModeKey: true] as CFDictionary,你会得到options参数,你会得到呈现为图标的预览。