如何解决快速的自我形象创造和改变
在Swift中,我有一个图像:(但是{我认为}问题是如何实现“自我”) (在我的viewDidLoad中)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bytesPerPixel = 4
let bitsPerComponent = 8
let bytesPerRow = bytesPerPixel * self.cols // width
let bitmapInfo = RGBA32.bitmapInfo
let minimapContext = CGContext(data: nil,width: self.cols,height: self.rows,bitsPerComponent: bitsPerComponent,bytesPerRow: bytesPerRow,space: colorSpace,bitmapInfo: bitmapInfo)
let buffer = minimapContext!.data
self.pixelBuffer = buffer!.bindMemory(to: RGBA32.self,capacity: self.cols * self.rows) // was let
var pixelIndex = 1
然后我遍历一个类似数组:
self.pixelBuffer[pixelIndex] = .blue
没有“自我”,一切都很好。
我想更改一些像素,所以我添加了“ self”并在ViewController类的顶部对其进行了定义
现在更改像素,如:
self.pixelBuffer[newPixelIndex] = .lightblue
但是我遇到各种错误: 无法将类型“ UnsafeMutablePointer”的值分配给类型“ RGBA32”
无法根据成员'lightblue'推断上下文基础
'RGBA32类型的值?'没有下标
不知道这是否有帮助,但是像ike那样定义了pixelBuffer:
var pixelBuffer: RGBA32? = nil
这是RGBA32:
struct RGBA32: Equatable {
private var color: UInt32
init(red: UInt8,green: UInt8,blue: UInt8,alpha: UInt8) {
color = (UInt32(red) << 24) | (UInt32(green) << 16) | (UInt32(blue) << 8) | (UInt32(alpha) << 0)
}
static let bitmapInfo = CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Little.rawValue
static func ==(lhs: RGBA32,rhs: RGBA32) -> Bool {
return lhs.color == rhs.color
}
static let black = RGBA32(red: 0,green: 0,blue: 0,alpha: 255)
static let red = RGBA32(red: 255,alpha: 255)
static let green = RGBA32(red: 24,green: 183,blue: 3,alpha: 255)
static let darkgreen = RGBA32(red: 70,green: 105,blue: 35,alpha: 255)
static let blue = RGBA32(red: 0,green: 127,blue: 255,alpha: 255)
static let lightblue = RGBA32(red: 33,green: 255,alpha: 255)
static let brown = RGBA32(red: 127,green: 63,alpha: 255)
}
谢谢!
解决方法
主要问题是您已声明self.pixelBuffer
为可选RGBA32。但这不是pixelBuffer
之前的事情。那是UnsafeMutablePointer<RGBA32>
。这是您需要的声明:
var pixelBuffer : UnsafeMutablePointer<RGBA32>!
我想,您所有的问题都将消失。您的
self.pixelBuffer[newPixelIndex] = .lightblue
然后为我编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。