我有以下表示RGBA像素的结构。我想实例化它来创建我自己的Pixel对象,但我没有这样做。编译器抛出此错误'Pixel' cannot be constructed because it has no accessible initializers
例如,所有这些都返回相同的错误:
var myPixel = Pixel()
var myPixel = Pixel(value: UInt32(1))
var myPixel = Pixel(value: UInt32(1), red: UInt8(1), green: UInt8(1), blue: UInt8(1))
public struct Pixel {
public var value: UInt32
public var red: UInt8 {
get {
return UInt8(value & 0xFF)
}
set {
value = UInt32(newValue) | (value & 0xFFFFFF00)
}
}
public var green: UInt8 {
get {
return UInt8((value >> 8) & 0xFF)
}
set {
value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF)
}
}
public var blue: UInt8 {
get {
return UInt8((value >> 16) & 0xFF)
}
set {
value = (UInt32(newValue) << 16) | (value & 0xFF00FFFF)
}
}
public var alpha: UInt8 {
get {
return UInt8((value >> 24) & 0xFF)
}
set {
value = (UInt32(newValue) << 24) | (value & 0x00FFFFFF)
}
}
}
我无法更改结构,因为它正在其他地方使用,它肯定有效。我已经挖掘了他们在像素阵列中使用它的代码,但不能使它的头部或尾部(第一次使用Swift)。以下是我认为的相关内容:
public struct RGBAImage {
public var pixels: [Pixel]
// ...
public init?(image: UIImage) {
// ...
let imageData = UnsafeMutablePointer<Pixel>.alloc(width * height)
// ...
let bufferPointer = UnsafeMutableBufferPointer<Pixel>(start: imageData, count: width * height)
pixels = Array(bufferPointer)
// ...
}
}
我正在使用Swift Playground,Pixel
结构和RGBAImage
结构位于Sources文件夹中的单独文件中。无效的代码位于主操场页面中。如果我将Pixel
结构复制/粘贴到主页面,一切都按预期工作。