【问题标题】:How to draw a line in a custom view (Retina) with a constant intensity?如何在自定义视图(Retina)中以恒定强度绘制一条线?
【发布时间】:2019-09-04 15:52:16
【问题描述】:

我想编写一个自定义绘图视图,它应该利用 Retina 显示。我正在使用 2019 款 MacBook Pro。为了测试绘图,我只绘制宽度为 1px 的平行线。但是这些线条在整个视图中显示出不均匀的亮度。

我已经尝试过从屏幕坐标进行转换,如发布在 https://developer.apple.com/library/archive/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/APIs/APIs.html#//apple_ref/doc/uid/TP40012302-CH5-SW2

这是视图 draw(...) 方法中的相关代码块

// fill with a black background
let background: NSBezierPath = NSBezierPath(rect: bounds)
NSColor.black.setFill()
background.fill()

// create a path that displays vertical lines 1px wide
let path: NSBezierPath = NSBezierPath()
let height: CGFloat = self.bounds.height


var xPosition: CGFloat = 0.0
while self.frame.width > xPosition {
    let rect:NSRect = NSRect(x: xPosition, y: 0, width: 0.5, height: height)
    path.appendRect(rect)
    xPosition += 10.0
}

NSColor.yellow.setFill()
path.fill()

结果如下图 线条变得越来越浅和越来越深,它们应该具有相同的强度

【问题讨论】:

  • 我也在 iPhone 上尝试了一个适配版本,在那里它正确显示了它
  • 您的屏幕截图示例未发布或不可见,但我猜您正在看到抗锯齿的效果。
  • 这也是我的想法,但我没有找到禁用它的方法,或者该怎么做
  • 这可能是您的显示硬件造成的。另外,您的显示分辨率在系统偏好设置中是如何配置的?它是否缩放到默认值以外的其他值?
  • 并非所有内容都未缩放;它是默认的 2560 x 1600 分辨率。其他一切看起来都很清晰,所以如果是配置问题,其他一切都应该有同样的问题

标签: swift macos cocoa nsview


【解决方案1】:

好的,我想出了解决方案。我不知道,设置为默认/未缩放的“未缩放”MacBook Pro 显示器实际上已缩放。 Apple 默认将屏幕分辨率提高 1,125 倍。要查看正确的屏幕,您需要选择 scaled 并降低一步以查看 nativ 屏幕分辨率。我仍然想知道除了使用更宽的线条之外,是否有优化措施可以在缩放显示上获得更好的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多