CVPixelBuffer для CGImage с уменьшением масштаба - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть следующий код для преобразования CVPixelBuffer в CGImage, и он работает правильно:

let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
// Lock the base address of the pixel buffer
CVPixelBufferLockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: CVOptionFlags(0)))

// Get the number of bytes per row for the pixel buffer
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer!)

// Get the number of bytes per row for the pixel buffer
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
// Get the pixel buffer width and height
let width = CVPixelBufferGetWidth(imageBuffer!)
let height = CVPixelBufferGetHeight(imageBuffer!)

// Create a device-dependent RGB color space
let colorSpace = CGColorSpaceCreateDeviceRGB()

// Create a bitmap graphics context with the sample buffer data
let bitmap = CGBitmapInfo(rawValue: CGBitmapInfo.byteOrder32Little.rawValue|CGImageAlphaInfo.premultipliedFirst.rawValue)
let contextBM = CGContext(data: baseAddress, width: width, height: height, bitsPerComponent: 8,
                                  bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmap.rawValue)
// Create a Quartz image from the pixel data in the bitmap graphics context
let quartzImage = contextBM!.makeImage()

//Unlock the pixel buffer
CVPixelBufferUnlockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: CVOptionFlags(0)))

self.myCGImage = quartzImage

Теперь я хочу, чтобы создаваемое CGImage было меньше по размерам. Может быть, половина размера? Можно ли изменить приведенный выше код, не запуская ничего лишнего?

...