gpt4 book ai didi

swift - 有没有更快的方法在 MacOS Cocoa swift 应用程序中绘制 NSImage?

转载 作者:搜寻专家 更新时间:2023-11-01 06:50:20 26 4
gpt4 key购买 nike

我有一个 ImageView 定义为:

@IBOutlet weak var imgView: NSImageView!

写入的图像数据定义为:

var imageData = [[Int?]](
repeating: [Int?](repeating: nil, count: 256),
count: 240
)

我正在从计时器调用我的 onDraw 方法。绘制时间最长的核心部分是:

    let image = NSImage(size: NSSize(width: 240, height: 256))

image.lockFocus()

for y in 0..<240 {
for x in 0..<256 {
let n = imageData[y][x]
let scaledY = 255 - y
let c = NSColor(red: CGFloat(((n! & 0xFF000000) >> 24)) / 255.0, green: CGFloat((n! & 0x00FF0000) >> 16) / 255.0, blue: CGFloat((n! & 0x0000FF00) >> 8) / 255.0, alpha: 1.0)
c.drawSwatch(in: NSRect(x: x, y: scaledY, width: 1, height: 1))
}
}

image.unlockFocus()

imgView.image = image

我试过更改定时器速度,但看起来绘图部分花费的时间太长了。试图达到 30 FPS,但由于绘制图像数据所花费的时间,它最终会跳帧。

注释掉 NSColor 对象的创建和它运行得非常快的 c.drawSwatch。但显然什么也没画。

那么有没有更快的方法来绘制到 NSImage 中?抱歉,我对 Swift 和 Cocoa 开发还很陌生。

最佳答案

很难从你的问题中准确地说出你想做什么。

我猜你应该 create a CGImage from a data provider with the proper bitmap metadata然后 create an NSImage from that .如果您想要缩放,请不要在创建 CGImage 时尝试这样做。尽可能直接给它原始图像数据。稍后,在从它创建 NSImage 时指定一个大小。

在任何情况下,避免重新创建这些图像对象,除非并且直到基础图像数据发生变化。例如,不要在每次要求 View 自行绘制时都重新创建图像。

关于swift - 有没有更快的方法在 MacOS Cocoa swift 应用程序中绘制 NSImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com