gpt4 book ai didi

ios - 当我将 MTLTexture 保存到 CGImage 时,像素颜色会发生变化吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:05:27 24 4
gpt4 key购买 nike

我需要将 Metal 纹理保存并加载到文件中。下面的示例代码如下。我注意到 RGB 值在保存和重新加载时发生了变化。

metal texture pixel: RGBA: 42,79,12,95  
after save and reload: 66,88,37,95

那变得更亮也更灰暗。接下来保存它开始变暗。我使用的是 iPad Pro,所以想知道这是否是色彩空间问题。关于为什么会发生这种情况以及如何解决它的任何指示?

在下面保存 cgImage 的行中,我可以检查原始像素数据并看到 RGBA 为 66、88、37。

// saving...
let ciCtx = CIContext()
let ciImage = CIImage(mtlTexture: metalTexture, options: [:])
// [ … transfrom to flip y-coordinate …]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let cgImage = ciCtx.createCGImage(ciImage, from: fullRect, format: kCIFormatRGBA8, colorSpace: colorSpace)!
let imageDest = CGImageDestinationCreateWithData(mData, kUTTypePNG, 1, nil)!
CGImageDestinationAddImage(imageDest, cgImage, nil)
CGImageDestinationFinalize(imageDest)

// loading...
let src = CGImageSourceCreateWithData(imgData, nil)
let img = CGImageSourceCreateImageAtIndex(src, 0, nil)
let loader = MTKTextureLoader(device: self.metalDevice)
let texture = try! loader.newTexture(cgImage: img, options: [:])

最佳答案

我遇到了一个非常相似的问题。我认为如果您将一些选项传递给 CIImage() 而不是不进行颜色空间管理,即“选项:[:]”,您将摆脱颜色偏移问题。

let kciOptions = [kCIImageColorSpace: CGColorSpaceCreateDeviceRGB(),
kCIContextOutputPremultiplied: true,
kCIContextUseSoftwareRenderer: false] as [String : Any]
let ciImage = CIImage(mtlTexture: metalTexture, options: kciOptions)

当我有 this 时,以上对我有用问题。

关于ios - 当我将 MTLTexture 保存到 CGImage 时,像素颜色会发生变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49713008/

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