ARKit capturedImage Повернуть в портрет и вывести в необработанное растровое изображение в виде пустого изображения - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь вывести захваченное изображение в растровое изображение в правильной ориентации.Код ниже работает, если я удалю строку ...

CGContextConcatCTM(context, displayTransform);

Но изображение сбоку.Если я добавлю отображение трансформации, изображение будет пустым.Я использую это преобразование неправильно?Спасибо

-(bool)getCurrentFrameCameraTextureIntoBufferAsARGB:(ARSession*)session buffer:(BytePtr)buffer ofSize:(int)bufferSize
{
    // do we have a current frame
    if (session.currentFrame != nil)
    {
        // do we have a captured image?
        if (session.currentFrame.capturedImage != nil)
        {
            // convert depth data to cgimage
            int ciImageWidth = (int)CVPixelBufferGetWidth(session.currentFrame.capturedImage);
            int ciImageHeight = (int)CVPixelBufferGetHeight(session.currentFrame.capturedImage);
            CIImage *ciImage = [CIImage imageWithCVPixelBuffer:session.currentFrame.capturedImage];
            CIContext *temporaryContext = [CIContext contextWithOptions:nil];
            CGImageRef image = [temporaryContext createCGImage:ciImage fromRect:CGRectMake(0, 0, (float)ciImageWidth, (float)ciImageHeight)];

            // check that buffer can hold the image!
            if (bufferSize < ciImageWidth*ciImageHeight*4)
                return false;

            // now render this to bitmap
            NSUInteger width = CGImageGetWidth(image);
            NSUInteger height = CGImageGetHeight(image);
            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
            NSUInteger bytesPerPixel = 4;
            NSUInteger bytesPerRow = bytesPerPixel * width;
            NSUInteger bitsPerComponent = 8;
            CGContextRef context = CGBitmapContextCreate(buffer, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
            CGColorSpaceRelease(colorSpace);
            CGAffineTransform displayTransform = [session.currentFrame displayTransformForOrientation:UIInterfaceOrientationPortrait viewportSize:CGSizeMake(width, height)];
            CGContextConcatCTM(context, displayTransform);
            CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
            CGContextRelease(context);
            CFRelease(image);
        }
    }
    return true;
}
...