gpt4 book ai didi

macos - NSImage 与 NSBitmapImageRep : massive memory usage differences?

转载 作者:行者123 更新时间:2023-12-03 17:10:31 26 4
gpt4 key购买 nike

我正在尝试使用 Cocoa 处理大型 (8000×8000) 图像。当使用 NSImage 时,以下代码立即耗尽大约 1GB 的 RAM:

var outputImage = NSImage(size: NSMakeSize(8000, 8000))
outputImage.lockFocus()
// drawing operations here

但是使用 NSBitmapImageRep 时,只使用了几百 MB:

var outputRep = NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: 8000, pixelsHigh: 8000, bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSDeviceRGBColorSpace, bytesPerRow: 0, bitsPerPixel: 0)
var context = NSGraphicsContext(bitmapImageRep: outputRep!)
NSGraphicsContext.saveGraphicsState()
NSGraphicsContext.setCurrentContext(context)
// drawing operations here

如果我的计算正确,一张 8000×8000 的图像应该消耗大约 (8000 × 8000 × 4 ÷ 1024 ÷ 1024) = 244MB,这与 NSBitmapImageRep 的内存使用量一致。

为什么 NSImage 使用所需内存的 4 倍?

最佳答案

哎呀!我忽略了 4 倍内存使用的重要性。事实证明,NSImage 使用点而不是像素,这意味着在 Retina 设备上,所有 NSImage 实际上都将使用 2× 像素分辨率。这意味着我的8000×8000点(16000×16000像素)图像的实际内存占用为977MB,这与我的结果一致。

关于macos - NSImage 与 NSBitmapImageRep : massive memory usage differences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386879/

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