NSView.cacheDisplay(in:to :)快照导致模糊/模糊NSImage

时间:2019-09-11 09:31:49

标签: cocoa nsview nsimage

我有一个基本的Cocoa应用,正在尝试捕获NSView的快照(包括子视图)以用作拖动会话中的自定义图像。

我使用NSView.cacheDisplay(in:to:)将快照捕获为NSImage。但是,NSTextView中的文本在结果中看起来模糊/模糊:

Fuzzy text

我考虑使用cacheDisplay()作为dataWithPDF()的替代方法,但这不是一个选择,因为对于更复杂的视图,它花费的时间要长得多(超过0.5秒,这在拖动时会引起明显的延迟) )。

下面是我使用的代码。我愿意征求意见。这可能是某种抗锯齿问题吗?

extension NSView {
   func snapshotFromPDF() -> NSImage?  {
        return NSImage(data:dataWithPDF(inside: bounds))
    }

   func snapshotByCachingDisplayRect() -> NSImage?  {
        // NOTE: Using cacheDisplay() and a bitmap image rep is way faster than NSView.dataWithPDF()

        guard let rep = bitmapImageRepForCachingDisplay(in: bounds) else { return nil }

        cacheDisplay(in: bounds, to: rep)

        guard let cgImage = rep.cgImage else { return nil }

        return NSImage(cgImage: cgImage, size: bounds.size)
    }
}

0 个答案:

没有答案