Я пытаюсь вывести захваченное изображение в растровое изображение в правильной ориентации.Код ниже работает, если я удалю строку ...
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;
}