作者:I-1ove-Y0u | 来源:互联网 | 2022-12-21 14:40
我需要保存金属纹理并将其加载到文件中。下面的示例代码如下。我注意到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: [:])
Plutovman..
7
我遇到了一个非常相似的问题。我认为,如果您将某些选项传递给CIImage()而不是不进行颜色空间管理,即“ options:[:]”,您将摆脱颜色偏移问题。
let kciOptiOns= [kCIImageColorSpace: CGColorSpaceCreateDeviceRGB(),
kCIContextOutputPremultiplied: true,
kCIContextUseSoftwareRenderer: false] as [String : Any]
let ciImage = CIImage(mtlTexture: metalTexture, options: kciOptions)
当我遇到这个问题时,以上内容对我有用。
1> Plutovman..:
我遇到了一个非常相似的问题。我认为,如果您将某些选项传递给CIImage()而不是不进行颜色空间管理,即“ options:[:]”,您将摆脱颜色偏移问题。
let kciOptiOns= [kCIImageColorSpace: CGColorSpaceCreateDeviceRGB(),
kCIContextOutputPremultiplied: true,
kCIContextUseSoftwareRenderer: false] as [String : Any]
let ciImage = CIImage(mtlTexture: metalTexture, options: kciOptions)
当我遇到这个问题时,以上内容对我有用。