在我的swift項目中,我有兩個類一起工作,以保持圖像的像素值能夠修改紅色,綠色,藍色和alpha值。 UnsafeMutableBufferPointer
包含大量由Pixel類對象組成的小部件。主題1:EXC_BAD_ACCESS(code = EXC_I386_GPFLT)
我可以與持有UnsafeMutableBufferPointer<Pixel>
屬性的類進行交互。我可以訪問該對象上的所有屬性,並且一切正常。我在UnsafeMutableBufferPoint<Pixel>
上遇到的唯一問題是嘗試通過Pixel對象循環播放它,並且它一直與Thread 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
異常一起崩潰。
init!(image: UIImage)
{
_width = Int(image.size.width)
_height = Int(image.size.height)
guard let cgImage = image.cgImage else { return nil }
_width = Int(image.size.width)
_height = Int(image.size.height)
let bitsPerComponent = 8
let bytesPerPixel = 4
let bytesPerRow = _width * bytesPerPixel
let imageData = UnsafeMutablePointer<Pixel>.allocate(capacity: _width * _height)
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapInfo: UInt32 = CGBitmapInfo.byteOrder32Big.rawValue
bitmapInfo |= CGImageAlphaInfo.premultipliedLast.rawValue & CGBitmapInfo.alphaInfoMask.rawValue
guard let imageContext = CGContext(data: imageData, width: _width, height: _height, bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo) else { return nil }
imageContext.draw(cgImage, in: CGRect(origin: CGPoint.zero, size: image.size))
_pixels = UnsafeMutableBufferPointer<Pixel>(start: imageData, count: _width * _height)
}
此功能是崩潰程序的部分。崩潰的確切部分是循環遍歷rgba.pixels的for循環。 rgba.pixels是UnsafeMutableBufferPointer。
這是我創建UnsafeMutableBufferPointer<Pixel>
的構造函數。有沒有更簡單的方法來做到這一點,仍然能夠獲得RBGA值並輕鬆更改它們。
Pixel類是一個UInt32
值,它被分成四個UInt 8
值。
我是否使用錯誤的構造來保存這些值,如果有的話,是否有更安全或更容易使用的構造?或者當我在訪問像素值時做錯了什麼?