具有大图像尺寸的 UIImage - 内存问题 - 崩溃

2024-01-24

我想加载并显示图像(.jpg,.png)具有大尺寸,例如1800x1200 或 2000x1800(宽 x 高)。 如果我在 UIImageView 中显示如此大尺寸的图像(1800x1200 或 2000x1800),它也会消耗大量内存,并且应用程序会崩溃。 另外根据苹果的文档(http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html),我们应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。 一种解决方案是调整图像大小。我已使用以下代码应用逻辑来调整图像大小。

UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

这工作正常并调整图像大小。但是,当它在设备上下文中加载大图像以调整大小时,它会在一秒钟内消耗大量内存,并且因此应用程序崩溃。 所以这个方法是行不通的。如果您有更好的方法来调整大小而不使其崩溃,请分享。

也在这个(http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html)链接,苹果说

“您应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。除了此类图像会消耗大量内存之外,在 OpenGL ES 中使用图像作为纹理或将图像绘制到视图或图层。如果您执行基于代码的操作,例如通过将图像绘制到位图支持的图形上下文来调整大于 1024 x 1024 像素的图像大小,则此大小限制不适用。事实上,您可能需要调整大小以这种方式绘制图像(或将其分解为几个较小的图像),以便将其绘制到您的视图之一。”。

有人可以详细说明吗"This size restriction does not apply if you are performing code-based manipulations, such as resizing an image larger than 1024 x 1024 pixels by drawing it to a bitmap-backed graphics context."?如何在位图支持的图形上下文上绘制图像?什么是位图支持的图形上下文?如果有人可以分享示例代码,这会对我有帮助。 提前致谢!!


UIGraphicsBeginImageContext() 创建一个位图支持的图形上下文(在幕后它调用 CGBitmapContextCreate)。

发生“限制”是因为 UIViews 是使用 CALayers 渲染的,而 CALayers 在 GPU 上渲染为纹理多边形,并且 GPU 具有最大纹理大小(在 iPhone 2G/3G 上似乎是 2044 像素,大概在 iPod Touch 1G/2G 上) )。他们在 3GS 及更高版本的设备上增加了它,大概是因为相机的照片更大。

也就是说,你ought能够毫无问题地操纵单个相机大小的图像;崩溃表明您在其他地方使用了大量内存(可能是内存泄漏?)。

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

具有大图像尺寸的 UIImage - 内存问题 - 崩溃 的相关文章

  • 在后台轮询服务器的正确方法

    假设这是可能的 我希望我的 iOS 应用程序在后台时轮询服务器 即基本上每 30 分钟检索一次 URL 的内容 并通知用户是否包含 有趣 的内容 基本上以类似的方式如果您不使用推送通知 则内置邮件客户端假定的工作方式 现在 从我到目前为止的
  • 并发访问且不受数据结构的影响

    问题是这样的 我有一个包含 500 个指针的数组 它们指向双向链表中的 500 个元素 有 10 个并行运行的线程 每个线程运行 50 个循环 并尝试释放列表中的某些元素 该列表已排序 包含简单整数 并且有 10 个其他线程并行运行 搜索包
  • UISearchBar 取消按钮没有响应

    我已经实现了搜索栏 一旦用户将焦点放在搜索栏中 它就会显示取消按钮 为此我写了searchBar showsCancelButton YES in my searchBarTextDidBeginEditing方法 在searchBarSe
  • CoreBluetooth广告检测时间

    这个问题早在10月份就已经讨论过here https stackoverflow com questions 12866551 corebluetooth connection setup time varies quite a bit 1
  • 如何检查 iOS 分发配置文件是否启用了推送通知?

    我有一个应用程序应该启用推送通知 但由于某种原因没有启用它们 我见过其他人下载并安装了该应用程序 但它甚至没有提示他们授予发送推送通知的权限 正如预期的那样 此应用程序不会出现在其 设置 gt 通知 中 但是 在我的 iPad 上 我能够从
  • iPhone OS:从匿名对象获取方法和变量列表

    我正在构建我的第一个 iPhone Obj c 应用程序 并且我有大量的数据保存子类 我将它们传递给引用函数 对于 cite 函数 这些对象是匿名的 我需要找到一种方法来访问每个传递对象的所有变量 我一直在使用预构建的 NSArray 和选
  • iOS 4.0 contentScaleFactor 和比例 - 在 3.1.3 中如何处理?

    我的任务是制作一个在 iOS 4 0 中运行的应用程序再次在 3 1 3 和 3 2 中运行 大多数情况下 它很简单 但处理新 API 的扩展和其他必须传递 返回值的情况很困难 respondsToSelector performSelec
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • 创建自定义 MCBrowserViewController

    有没有办法创建一个UITableView包含在中找到的相同信息MCBrowserViewController 我当前的代码只允许推送与我的应用程序设计不同的标准视图 self browserVC MCBrowserViewControlle
  • 如何模拟OutOfMemory异常

    我需要重构我的项目以使其免受OutOfMemory例外 我的项目中使用了巨大的集合 通过更改一个参数 我可以使我的程序更加准确或使用更少的内存 好吧 这就是背景 我想做的是循环运行例程 使用默认参数运行子例程 抓住OutOfMemory异常
  • 如何在 UITableView 中显示零行的表格

    我正在动态地将内容加载到 UITableView 中 如果有数据 表格需要显示数据 如果没有数据 表格应显示普通页面 但在我的应用程序中 表格显示带有两条分隔线的普通页面 我需要删除此分隔线并显示纯白色页面 请建议 任何帮助 将不胜感激 如
  • 如何在数据部分(RAM)中保留一定范围的内存并防止同一应用程序使用该内存的堆/堆栈?

    我想在 RAM 中保留 分配一定范围的内存 并且同一应用程序不应覆盖或使用该范围的内存进行堆 堆栈存储 如何在内存中分配一定范围的内存以防止堆栈 堆覆盖 我考虑过向应用程序本身添加 或分配 一个数组并保留内存 但它被编译器优化了 因为它在应
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • iPhone - UIImage imageWithData 返回 nil

    我需要从字节数组创建 UIImage 现在我创建了字节数组 image CGImageCreateWithImageInRect aux CGImage imageRect context CGBitmapContextCreate dat
  • 直接在 XCode 中编译 Arm Assembly

    将arm汇编代码编译成xcode的最佳方法是什么 我有生成的那些程序集文件 有没有办法可以将 s 文件直接包含到我拥有的 C 代码中 或者我需要先运行一个预处理器 它将生成 o 文件 我可以将其与我的文件链接 如果是这样的话 在 XCode
  • UIView animateWithDuration:delay: 工作很奇怪

    我在使用 iPhone 动画块时遇到了一个奇怪的问题 这段代码 UIView animateWithDuration 2 delay 0 options 0 animations void controller setBackgroundC
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 编码时捕获 NS_AVAILABLE_IOS

    我知道如何更改支持的最低操作系统IPHONEOS DEPLOYMENT TARGET 我目前正在 Xcode 4 5 下进行开发并使用 iOS 6 0 SDK 我想做的是找到一种方法 每当我使用标记的代码时在编译中抛出警告 NS AVAIL
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的

随机推荐

  • 为什么要使用处理程序?

    我在一个非常基本的处理程序教程中遇到了这段代码 代码工作正常 但我不明白为什么我必须使用 HandlerprogressDialog dismiss 我删除了处理程序部分并放置progressDialog dismiss in the ru
  • 是否可以在 C++ 运行时动态创建函数?

    C 是一种静态的编译语言 模板在编译时解析等等 但是是否有可能在运行时创建一个函数 该函数未在源代码中描述 并且在编译期间未转换为机器语言 以便用户可以向其抛出源代码中未预期的数据 我知道这不可能以直接的方式发生 但肯定是可能的 有很多编程
  • 如何使用 Bootstrap 3 在下拉列表中选择默认值?

    我想添加一个下拉菜单来选择城市 但不知道如何在选择之前选择默认值 我正在使用 Bootstrap 3 这是 HTML 标记 div class btn group a class btn btn primary dropdown toggl
  • Android-Ndk 与交叉编译?两者都可以,但是当时需要 Android NDK 做什么呢?

    我可以交叉编译任何 C C 应用程序 静态链接 Linux 库并在 Android 上运行 那么 Android ndk 的需求是什么 Android ndk 将我们限制为 Bionic 它具有 gnu libc 的一小部分 直接交叉编译应
  • UIImage 的 jpg 或 png ——哪个更有效?

    我从相机胶卷中抓取一张图像 然后使用它一段时间 并将其以 PNG 格式保存到 iPhone 的磁盘上 我遇到了奇怪的崩溃 可能是由于内存不足 如果我将其保存为 PNG 或 JPG 假设我选择注释来降低 JPG 情况下的质量 会有什么不同吗
  • Amazon S3 上的 Presto

    我正在尝试在 Amazon S3 存储桶上使用 Presto 但在 Internet 上没有找到太多相关信息 我已经在微型实例上安装了 Presto 但我无法弄清楚如何连接到 S3 有一个桶 里面有文件 我有一个正在运行的 hive 元存储
  • 第一个计时器勾选后鼠标事件不起作用

    我正在使用 powershell 开发一个带有图形界面的小工具 我对这个问题感到疯狂 例如 我在表单上有一个标签 显示 ping 的 实时 状态 同时 如果单击标签 则会显示一条弹出消息 function GoogleStatus Labe
  • 在应用程序中存储短音频文件/流式传输

    我计划制作一个利用 Parse com 后端进行用户身份验证 帖子 关注者 等的应用程序 我希望用户能够将示例音乐文件上传到 Parse 或替代解决方案 然后能够流式传输或让其他人能够播放它 有人告诉我可以使用 PFFile 存储文件 但是
  • 公式不使用 EPPLUS 计算

    我想转让一个Datatable超越并计算总和 为此 我使用 epplus 这是我的代码 Sheet Cells A1 LoadFromDataTable dsExcel Tables 0 true TableStyles Medium9 S
  • 如何在intellij idea中启用从源滚动到外部库?

    我想查看外部库树中反编译类的位置 我怎样才能做到这一点 谢谢 找到了一种获取所显示的反编译类的包的方法 ctrl click在代码中的包上 java 文件中最上面的命令
  • 在 Gtk+ 中堆叠小部件

    Gtk 中有没有一种方法可以将一个小部件堆叠在另一个小部件之上 不包括 GtkFixed GtkFixed 不能很好地工作有两个原因 1 我需要 Z 顺序 2 我需要一个小部件来拉伸和填充提供的空间 我使用 Gtk Fixed 实际上是 g
  • Android 主屏幕小部件动画

    我正在考虑创建一个支持动画的小部件 最好是通过 android view animation 框架 或者通过在后台服务触发的代码中设置远程视图的属性 有没有人对这两种方法有任何经验 我正在尝试的是可行的 还是我正在走入死胡同 实际上可以为
  • MacOS 上的打包电子应用程序不会生成子节点进程

    我创建了一个电子应用程序 当在主进程中运行时 它将生成一个节点子进程 该子进程将提供一些 html 内容 app on ready gt check for port 80 const port 80 find port port then
  • 来自未完全填充的字符数组的字符串

    显然 下面的代码给出了一个相当奇怪的结果 char data new char 5 data 0 a data 1 b data 2 c out println new String data abc 有没有一种方法可以从字符数组创建字符串
  • Android上React Native Axios上传图片返回网络错误

    我尝试使用以下命令将一些数据 包括图像 上传到服务器Axios 它在 iOS 上完美运行 但在 Android 上 它返回Network Error const data new FormData data append tag tag M
  • Rails 收集 JSON 数据并将其渲染到 Highcharts 图表中

    我正在尝试将标签传递到 x 轴上的 Highcharts 柱形图 目前 图表的工作方式是渲染数据 但 x 轴标签显示 0 1 2 3 等 这是没有任何可渲染内容时的默认值 注释 控制器 def dashboard data Note get
  • 从服务帐户获取访问令牌刷新错误:Google API 中的 invalid_grant

    我正在关注这个例子 https code google com p google api python client source browse samples service account tasks py https code goo
  • javax.ws.rs.client.Client如何配置readTimeOut?

    从com sun jersey api client Client to javax ws rs client Client如何配置客户端 FROM import com sun jersey api client Client Clien
  • 反向滚动

    我很难找到我想要完成的任务的解决方案 我正在尝试使用 JS 或其他库 来实现它 以便当用户在鼠标滚轮上向下滚动时 页面滚动的方式与通常相反 基本上 我希望首先看到页面的底部 当用户滚动时 我希望屏幕的顶部进入视图 我能找到的唯一例子是右列h
  • 具有大图像尺寸的 UIImage - 内存问题 - 崩溃

    我想加载并显示图像 jpg png 具有大尺寸 例如1800x1200 或 2000x1800 宽 x 高 如果我在 UIImageView 中显示如此大尺寸的图像 1800x1200 或 2000x1800 它也会消耗大量内存 并且应用程