ios - UIIView 到 CGContext 横向坐标系

标签 ios objective-c

我正在 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 的坐标系是什么?

我需要的正确转换是什么?

Screen Shot

Movie

最佳答案

实际上,如果应用程序以横向模式启动, View 的框架应该已经具有正确的大小,因此您不需要旋转上下文。

您只需翻转上下文的 y 轴,方法如下:

CGContextScaleCTM(c, 1, -1);
CGContextTranslateCTM(c, 0, -size.height);

关于ios - UIIView 到 CGContext 横向坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795342/

相关文章:

ios - Box iOS SDK - 给定文件夹名称,获取文件夹 ID?

ios - 如何将 .cgi URL 中的参数收集到 iOS objC 中的多个字符串中?

ios - FIrebase FCM - 推送消息最终出现在错误的应用程序中

ios - 动态UIButton定位?

ios - 从 nsdictionary 填充 uitableview

ios - 标签栏可以包含 "play"按钮吗

objective-c - 如果我的服务器出现故障无法提供内容,如何取消应用内购买? (iOS)

ios - 在 calendarTableView 自定义单元格中添加 View 破坏了代码 Swift 4

ios - 在 iOS 的 Google Plus 的 GPPSignInButton 中自定义图像?

objective-c - 函数声明中的预期标识符 - Objective-C 到 Swift