我正在 try catch 屏幕截图并制作电影。在纵向模式下一切正常,但我的应用程序只是横向应用程序。
我正在使用此方法将 UIImage.CGImageRef 添加到视频中:
- (CVPixelBufferRef)pixelBufferFromCGImage:(CGImageRef)image withSize:(CGSize)frameSize
{
CVPixelBufferRef pxbuffer;
if (pixelBufferPool == NULL) {
NSLog(@"pixelBufferPool is null!");
return nil;
}
CVReturn status = CVPixelBufferPoolCreatePixelBuffer (NULL, pixelBufferPool, &pxbuffer);
if(status != kCVReturnSuccess) {
NSLog(@"failed to create pixel buffer pool pixel buffer %i", status);
return nil;
}
CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width,
frameSize.height, 8, 4*frameSize.width, rgbColorSpace,
kCGImageAlphaNoneSkipFirst);
//CGAffineTransform t = CGAffineTransformIdentity;
//t = CGAffineTransformRotate(t, 0/*M_PI_2*/);
//t = CGAffineTransformScale(t, -1.0, 1.0);
//CGContextConcatCTM(context, t);
CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image);
CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);
CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
return pxbuffer;
}
视频好像图像倾斜了。我知道它是因为 UIImage 和 CGContext 的坐标系不同,因此框架是倾斜的。但我不知道如何解决这个问题。
我尝试了旋转、缩放等。但一切都需要按正确的顺序。
横向应用中 UIImage 的坐标系和 CGContext 的坐标系是什么?
我需要的正确转换是什么?
最佳答案
实际上,如果应用程序以横向模式启动, View 的框架应该已经具有正确的大小,因此您不需要旋转上下文。
您只需翻转上下文的 y 轴,方法如下:
CGContextScaleCTM(c, 1, -1);
CGContextTranslateCTM(c, 0, -size.height);
关于ios - UIIView 到 CGContext 横向坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795342/