glReadPixels 只保存 1/4 屏幕尺寸的快照

2023-12-25

我正在为客户开发增强现实应用程序。 OpenGL 和 EAGL 部分已在 Unity 3D 中完成,并在我的应用程序中实现为视图。

我现在需要的是一个按钮,用于捕捉 OpenGL 内容的屏幕截图,这是最后面的视图。

我尝试自己编写它,但是当我单击具有指定 IBAction 的按钮时,它仅保存屏幕的 1/4(左下角) - 尽管它确实将其保存到相机胶卷中。

所以基本上,我怎样才能让它保存整个屏幕尺寸,而不是仅仅四分之一?

这是我的方法代码:

-(IBAction)tagBillede:(id)sender
{
    UIImage *outputImage = nil;

    CGRect s = CGRectMake(0, 0, 320, 480);            
    uint8_t *buffer = (uint8_t *) malloc(s.size.width * s.size.height * 4);

    if (!buffer) goto error;

    glReadPixels(0, 0, s.size.width, s.size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);    

    CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, buffer, s.size.width * s.size.height * 4, NULL);

    if (!ref) goto error;

    CGImageRef iref = CGImageCreate(s.size.width, s.size.height, 8, 32, s.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, ref, NULL, true, kCGRenderingIntentDefault);

    if (!iref) goto error;        

    size_t width = CGImageGetWidth(iref);    
    size_t height = CGImageGetHeight(iref);    
    size_t length = width * height * 4;            
    uint32_t *pixels = (uint32_t *)malloc(length);

    if (!pixels) goto error;

    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * 4,    
        CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);

    if (!context) goto error;            

    CGAffineTransform transform = CGAffineTransformIdentity;    
    transform = CGAffineTransformMakeTranslation(0.0f, height);    
    transform = CGAffineTransformScale(transform, 1.0, -1.0);    
    CGContextConcatCTM(context, transform);            
    CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), iref);         
    CGImageRef outputRef = CGBitmapContextCreateImage(context);

    if (!outputRef) goto error;

    outputImage = [UIImage imageWithCGImage: outputRef]; 

    if (!outputImage) goto error;    

    CGDataProviderRelease(ref);   
    CGImageRelease(iref);    
    CGContextRelease(context);    
    CGImageRelease(outputRef);
    free(pixels);
    free(buffer);

    UIImageWriteToSavedPhotosAlbum(outputImage, self, @selector(image: didFinishSavingWithError: contextInfo:), nil);
}

我怀疑您使用的是带有 Retina 显示屏的设备,分辨率为 640x960。您需要考虑屏幕比例;非 Retina 显示器上为 1.0,Retina 显示器上为 2.0。尝试初始化s像这样:

CGFloat scale = UIScreen.mainScreen.scale;
CGRect s = CGRectMake(0, 0, 320 * scale, 480 * scale);            
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

glReadPixels 只保存 1/4 屏幕尺寸的快照 的相关文章

  • 核心蓝牙在后台进行广告和扫描

    我一直在尝试设置一个应用程序 使设备既扫描外围设备又作为外围设备进行广告 目标是当两个设备通过蓝牙发现彼此靠近时在后台被唤醒 从 Apple 文档来看 您似乎应该能够在后台运行 BLE 启用蓝牙中心和蓝牙外设后台模式 并且当一台设备位于前台
  • CoreAnimation 性能分析 - CAReplicatorLayer 与 CAShapeLayer

    我正在制作一个依赖 CoreAnimation 的应用程序 它有一个 CAReplicatorLayer 和一个 CAShapeLayer 作为子层 当进行 12 次复制 然后对路径进行动画处理 在 touchMoved 上更改它 时 一旦
  • 找不到导航对象。您的组件是否位于导航器屏幕内?

    在我下面的代码中 当我使用 useNavigation 时 它会给出像我的问题一样的错误 如何使用useNavigation 请任何人都可以解决此错误 错误 找不到导航对象 您的组件是否位于导航器屏幕内 我从这里跟踪了代码https rnf
  • iOS 上每个选项的带有图像的操作表

    有没有办法在 iOS 上将图像添加到操作表中 与苹果在应用程序商店或苹果音乐应用程序上所做的一样 我对苹果文档的基本搜索表明我没有在操作表中子类化或添加子视图 UIActionSheet 并非设计为子类化 也不应向其层次结构添加视图 苹果文
  • Xcode 不会在故事板中显示我的文本字段占位符文本

    当我在属性检查器中分配文本字段的占位符值时 它不会显示在故事板中 但是 当我运行应用程序的模拟器时 它就在那里 我缺少什么设置吗 我只想能够在编辑器中看到占位符文本 下面是 xcode 和模拟器之一的屏幕截图 我遇到了同样的问题 幸运的是我
  • Swift 3 '[UIApplicationLaunchOptionsKey:任意]?'无法转换为 '[String : NSString]'

    我有一个 TVOS 应用程序已从 Swift 2 转换为 Swift 3 但出现以下错误 我不确定如何让它安静下来 UIApplicationLaunchOptionsKey 任意 无法转换为 String NSString 它出现在这段代
  • 自动调整大小完成后如何获取帧大小

    我想知道 如何以及何时 viewDidLoad viewWillAppear viewDidAppear 可以获得自动调整大小以适合其父视图的 UIViews 框架大小 从你的问题中不清楚你为什么想要它 但我想这是为了布局你的子视图 幸运的
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • 尝试从独立的 Apple Watch 应用发出网络请求

    当应用程序是独立应用程序时 Apple Watch 是否无法进行网络通话 即使手表已连接到 iPhone 我正在使用新的独立应用程序目标 它没有附带可以发出 WatchConnectivity 请求的配对 iOS 应用程序 我十有八九收到
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • UIBezierPath 的起始和结束角度?

    我在 iOS 中使用如下代码编写了半圆UI贝塞尔路径 and CAShape层 clockWiseLayer CAShapeLayer alloc init CGFloat startAngle M PI 2 CGFloat endAngl
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • UIImage:如何获取网站选项卡图标

    我正在开发一个 RSS 阅读器 我需要获取每个提要的图标 例如 如果我的提要是 google com 我想获取 G 图标并将其放入 UIImage 或其他内容中 关于如何实现这一目标有什么想法吗 最简单的方法是使用 Google NSStr
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • Swift 中 UIImages 的淡入淡出动画

    我有一组图像 我希望它们在登录屏幕的背景中淡出 我无法在 swift 中找到任何可以做到这一点的东西 有什么办法我可以做到吗 这是我当前的代码 override func viewDidLoad super viewDidLoad star
  • 播放(非库)Apple Music 内容 - 请求失败

    我正在尝试使用以下代码播放专辑 let predicate MPMediaPropertyPredicate value 1459938538 forProperty MPMediaItemPropertyAlbumPersistentID
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f

随机推荐

  • Razor 页面中的 Blazor 组件

    我们有一个基本的剃刀页面应用程序 我们想添加 Blazor 组件 通过复制 04 16 Blazor 更新视频中的步骤或使用 Blazor 文档 我们可以毫无问题地使其发挥作用 但是 一旦我们将 Blazor 组件添加到 Razor 页面
  • ASP.Net / C# - 缺少程序集引用

    Hi I am a newbie in C and visual studio As Figure1 shown I am trying to use the classes from other project in similar so
  • MIPS 中基于指针的数组访问

    MIPS 中基于指针的数组访问是什么意思 基于指针的数组访问 还有一个额外的可能含义或含义 您可能有一个指向数组的指针 而不是位于固定地址的数组 实际上 在 C C 中 指向数组的指针 实际上通常只是指向数组第一个元素的指针 基本上 您有一
  • 使用工厂方法理解 JDBC 等服务提供者框架背后的概念

    From Item 1 考虑静态工厂方法而不是构造函数 静态工厂方法返回的对象的类甚至不需要存在 在编写包含该方法的类时 这样灵活的静态工厂 方法构成了服务提供者框架的基础 例如 Java 数据库 连接 API JDBC 服务提供者框架是一
  • 在vba中将多个消息框值添加到单个消息框

    我有这段代码 我可以在每个外循环结束时显示消息 我想在假设数组或某种列表之类的结构中捕获所有这些消息 然后最后想将这些消息中的每一条显示到一个消息框中 如果有人能帮助我 我将不胜感激 谢谢 For Each objNavFolder In
  • “多个方法名为......”的问题

    我有一个问题 我想在我的项目中实现 UAModalpanelview 起初它工作得很好 我实现了这些文件 无论如何 但现在我想运行该应用程序 但每次都会出现此错误 正是因为 中心 它向我显示 发现多个名为中心的方法 其结果 参数类型或属性不
  • ArgumentOutOfRangeException:索引超出范围

    每当我使用时 我都会收到这个奇怪的 ArgumentOutOfRangeException PersitenceSpecification 类用于验证具有 对值对象的引用 public class CatalogItem DomainEnt
  • UIWebView 捕获帖子

    我正在寻找一个需要在 iPad 上显示 UIWebView 的项目的起点 问题是 HTML 将由 pad 生成并显示在 UIWebView 中 并且将包含许多输入控件 需要的是一种在用户完成输入后获取这些控件的内容的方法 类似于我在服务器上
  • Apptimize \ Optimizely 如何在 iOS 上工作?

    我试图弄清楚一些关于 幕后 实现的一些事情 用于直接从 Apptimize 或 Optimizely 上的 Web 控制台动态操作 UI 元素 更具体地说 我想了解以下内容 1 客户端代码 iOS 如何将视图层次结构发送到 Web 服务器
  • 使用 Firebase 时使用未解析的标识符“FIRDatabase”

    Xcode 告诉我FIRDatabase不是标识符 我的代码 import UIKit import Firebase UIApplicationMain class AppDelegate UIResponder UIApplicatio
  • 为什么tintColor 在 iOS7 上的导航栏或工具栏上不起作用

    在iPad的iOS7上 首先 我设置了一个模态视图控制器 大小为320 460 然后 在这个模态视图控制器中 我呈现了另一个导航视图控制器 在此之后 导航栏和工具栏的色调颜色呈现的导航控制器变成灰色 我尝试设置导航栏和工具栏的色调颜色 但它
  • 什么是 C++ 上下文中的单态化?

    戴夫 赫尔曼最近的演讲 http www infoq com presentations RustRust 说他们从 C 借用了这个属性 我找不到与该主题相关的任何内容 有人可以解释一下单态化是什么意思吗 单态化意味着生成通用函数的专门版本
  • 在Android中设置ListView的“空白”区域的颜色

    当我的列表视图未完全充满列表视图项目时 例如 我的列表视图足够高 可容纳 8 个项目 但我只有 2 个 空白区域在我的 Droid X 上显示为灰色 在模拟器中 空白区域显示变成黑色 如何将 空白 区域设置为透明 我尝试过设置背景颜色 缓存
  • Python 中的替代构造函数

    我正在处理图表并编写了一个 mixin 模块来创建图表 我想在其中有一些替代的构造函数 这就是我所拥有的 class Graph GraphDegree GraphDegreePlot GraphGeneration object def
  • 按照设计,属性 getter 是否应该在 python 中抛出异常?

    对于问题的某些上下文 我使用延迟加载来推迟类中某些属性的完全初始化 直到需要它们时 如果有的话 因为它们的计算成本可能很高 我的问题是 在 python 中 如果在计算属性值时发生错误 或者无法计算该值 那么引发异常是可以接受的还是客观上是
  • 选择单选按钮时如何清除文本字段内的文本

    目前我有这个单选按钮 电子学 电脑 Others 我想做的是 如果单选按钮Others被选中后 我想显示一个输入文本字段并让用户输入 我想做的是 当我选择Others并在输入字段中输入一些内容 然后当我选择返回时Eletronics or
  • 如何设置和运行适用于 PHP 的 Tesseract OCR(开源)?

    我已经根据GitHUb上提供的文档通过MacPorts安装了Tesseract OCR 并且安装成功 并且 但是 我正在尝试使用 Tesseract OCR for PHP https github com thiagoalessio te
  • python 解码 fernet 密钥

    我生成了一些 fernet 密钥并以 str 格式存储以供参考 现在 我需要将这些 str 格式的 fernet 密钥编码为 32 个 url 安全的 base64 编码字节来解密我的数据 from cryptography fernet
  • 在数据框的整个列中应用正则表达式

    我有一个包含 3 列的数据框 id name team 101 kevin marketing 102 scott admin n 103 peter finance n 我正在尝试应用正则表达式函数 以便删除不必要的空格 我已经得到了删除
  • glReadPixels 只保存 1/4 屏幕尺寸的快照

    我正在为客户开发增强现实应用程序 OpenGL 和 EAGL 部分已在 Unity 3D 中完成 并在我的应用程序中实现为视图 我现在需要的是一个按钮 用于捕捉 OpenGL 内容的屏幕截图 这是最后面的视图 我尝试自己编写它 但是当我单击