swift 游戏场和iPhone模拟器之间的CGContext有什么区别?

oxcyiej7  于 2023-04-28  发布在  Swift
关注(0)|答案(1)|浏览(98)

XCode 13.4.1
Swift 5
针对iPhone模拟器进行测试11,13
我试图理解为什么在下面的函数ctx。makeImage()在playground中返回一个有效的图像,但在模拟器中返回一个nil。我假设它是makeImage()参数中的某个东西,但如果我能弄清楚它是什么,我就很惊讶了。如有任何建议,我们将不胜感激。

func loadImage() -> CGImage? {
    var srgbArray = [UInt32](repeating: 0xFF204080, count: 512*512)
    _ = srgbArray.withUnsafeMutableBytes { (ptr) -> CGImage? in
        let ctx = CGContext(
            data: ptr.baseAddress,
            width: 512,
            height: 512,
            bitsPerComponent: 8,
            bytesPerRow: 4*512,
            space: CGColorSpace(name: CGColorSpace.sRGB)!,
            bitmapInfo: CGBitmapInfo.byteOrder32Little.rawValue +
                CGImageAlphaInfo.premultipliedFirst.rawValue
            )!
        let cgImage = ctx.makeImage()
        print("cgImage", cgImage)
        return(nil)
    }
    return(nil)
}
eiee3dmh

eiee3dmh1#

问题可能是填充数组时0xFF204080值的字节顺序。因为你想要图像的小字节序,改变使用:

0xFF204080

致:

UInt32(0xFF204080).littleEndian

这将确保数组数据是适当的,而不管运行代码的平台是什么。

相关问题