【发布时间】:2021-12-18 01:12:42
【问题描述】:
我试图弄清楚 setColor 是如何工作的。我有以下代码:
lazy var imageView:NSImageView = {
let imageView = NSImageView(frame: view.frame)
return imageView
}()
override func viewDidLoad() {
super.viewDidLoad()
createColorProjection()
view.wantsLayer = true
view.addSubview(imageView)
view.needsDisplay = true
}
func createColorProjection() {
var bitmap = NSBitmapImageRep(cgImage: cgImage!)
var x = 0
while x < bitmap.pixelsWide {
var y = 0
while y < bitmap.pixelsHigh {
//pixels[Point(x: x, y: y)] = (getColor(x: x, y: y, bitmap: bitmap))
bitmap.setColor(NSColor(cgColor: .black)!, atX: x, y: y)
y += 1
}
x += 1
}
let image = createImage(bitmap: bitmap)
imageView.image = image
imageView.needsDisplay = true
}
func createImage(bitmap:NSBitmapImageRep) -> NSImage {
let image = bitmap.cgImage
return NSImage(cgImage: image! , size: CGSize(width: image!.width, height: image!.height))
}
代码的目的是将照片(彩虹)更改为全黑(我现在只是用黑色进行测试,以确保我了解它的工作原理)。但是,当我运行程序时,显示的是彩虹的未更改图片,而不是黑色照片。
我收到以下错误:
Unrecognized colorspace number -1 和 Unknown number of components for colorspace model -1。
谢谢。
【问题讨论】:
-
看起来这一直是一个 XY 问题。更改读取、修改和写回单个像素值可能不是实现您想要实现的目标的方法。这将使用大量的 CPU 和内存,因为位图图像变得非常大非常快。您可能应该使用
CIFilterAPI 到 make your own filter 来执行此操作。
标签: swift macos nsimage cgimage nsbitmapimagerep