Ошибка CGContextDrawImage, как выделить буфер?
Я пытаюсь сохранить данные изображения в буфере в моем приложении, поэтому я смогу использовать его, однако получаю ошибку EXC_BAD_ACCESS в строке CGContextDrawImage. Вот код, который я использую:
resizedImage.Array() // resizedImage - resized image of 280x140 pixels size
func Array() {
let dataBuffer = UnsafeMutablePointer<CUnsignedChar>.alloc(156800) //alloc(156800)
memset(dataBuffer, 0, 156800)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue)
let context = CGBitmapContextCreate(dataBuffer, 280, 140, 8, 156800, colorSpace, bitmapInfo.rawValue)
let imageRef = CGImageCreateWithImageInRect(CGImage, CGRectMake(0, 0, 280, 140))
let rectMake = CGRectMake(0, 0, 280, 140)
CGContextDrawImage(context, rectMake, imageRef)
return
}
При попытке установить буфер и байты равными нулю и 0, как в документации Apple, для автоматического распределения памяти приложение не падает, но выдает следующие ошибки:
Sep 17 17:18:33 VideoTester[4846] <Error>: CGBitmapContextCreate: invalid data bytes/row: should be at least 1120 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedLast.
Sep 17 17:18:33 VideoTester[4846] <Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Кажется, я что-то упустил, но не могу понять, нужен какой-то совет, спасибо!
1 ответ
Получил это работает с помощью peacer212, все, кажется, работает как нужно без каких-либо ошибок, вот рабочий код:
var dataBuffer = [UInt8](count: 280*140 * 4, repeatedValue: 0)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue)
let context = CGBitmapContextCreate(&dataBuffer, 280, 140, 8, 1120, colorSpace, bitmapInfo.rawValue)
let imageRef = CGImageCreateWithImageInRect(CGImage, CGRectMake(0, 0, 280, 140))
let rectMake = CGRectMake(0, 0, 280, 140)
CGContextDrawImage(context, rectMake, imageRef)