Я использую AVCaptureVideoPreviewLayer, чтобы показать слой предварительного просмотра, образцы изображений из этого предварительного просмотра и выполнить некоторую обработку на нем. Обработка распознает некоторые моменты изображения и возвращает их. Я хочу показать эти точки на уровне предварительного просмотра (почти) в реальном времени.ios AVCaptureVideoPreviewLayer конвертирует между координатами камеры и экрана
У меня есть некоторые проблемы с преобразованием этих точек, особенно при переключении между ориентациями.
Это, как я установить предварительный просмотр слой:
self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
Это, как я получить изображение из слоя:
- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer {
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
CVPixelBufferLockBaseAddress(pixelBuffer,0);
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(pixelBuffer);
size_t bbytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef myContext = CGBitmapContextCreate(baseAddress, width, height, 8, bbytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
self.cgImage = CGBitmapContextCreateImage(myContext);
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
//image processing ...
}
Теперь то, что я получаю точки в этом изображении системе координат. Что мне нужно - это метод преобразования его в экранные координаты, чтобы представить его на экране
Любые идеи?