使用 CoreGraphics 在视网膜显示屏上绘图 - 图像像素化

2024-01-06

在我的 iOS 应用程序中,我尝试使用 CoreGraphics 绘制曲线。绘图本身工作正常,但在视网膜显示器上,图像是使用相同的分辨率绘制的,并且像素不会加倍。结果是像素化图像。

我正在使用以下函数进行绘图:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:self.canvasView];

    UIGraphicsBeginImageContext(self.canvasView.frame.size);
    [canvasView.image drawInRect:self.canvasView.frame];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetShouldAntialias(ctx, YES);
    CGContextSetLineCap(ctx, kCGLineCapRound);
    CGContextSetLineWidth(ctx, 5.0);
    CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0);
    CGContextBeginPath(ctx);
    CGContextMoveToPoint(ctx, lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(ctx, currentPoint.x, currentPoint.y);
    CGContextStrokePath(ctx);
    canvasView.image =  UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;
    // some code omitted from this example
}

我发现的建议是use the scaleFactor财产 https://stackoverflow.com/questions/4707465/coregraphics-for-retina-display, 或者CGContextSetShouldAntialias()功能 https://stackoverflow.com/questions/5291510/drawing-with-core-graphics-looks-chunky-on-retina-display,但到目前为止这些都没有帮助。 (尽管我可能使用不当。)

任何帮助将不胜感激。


您需要将 UIGraphicsBeginImageContext 替换为

if (UIGraphicsBeginImageContextWithOptions != NULL) {
  UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
} else {
  UIGraphicsBeginImageContext(size);
}

UIGraphicsBeginImageContextWithOptions 是在 4.x 软件中引入的。如果您要在 3.x 设备上运行此代码,您需要弱链接 UIKit 框架。如果您的部署目标是 4.x 或更高版本,则只需使用 UIGraphicsBeginImageContextWithOptions 即可,无需任何其他检查。

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

使用 CoreGraphics 在视网膜显示屏上绘图 - 图像像素化 的相关文章

  • React Native:不透明视图内的透明视图

    我想用不透明框架和透明中心显示相机的视图 就像图片中的一样 黑色部分是相机的视图 我正在寻找具有纯反应本机组件的解决方案 没有额外的库 例如https github com gilbox react native masked view h
  • 如何在 ios 7 上更改重新排序控制图像

    我正在寻找一种更改重新排序控件图像和大小的方法 我使用此代码来更改重新排序图像 void tableView UITableView tableView willDisplayCell UITableViewCell cell forRow
  • 在 Flutter 中显示 iOS 的 PDF 内联文件

    我正在 flutter 中专门为 iOS 开发一个应用程序 现阶段 我需要向其中添加 PDF 文件 问题是 flutter 没有原生的方式来显示 PDF 文件 据我研究 由此tread https github com flutter fl
  • 在 iOS 11 中创建 Gif 图像颜色贴图

    最近 我在创建 Gif 时遇到了一个问题 如果它太大 颜色就会丢失 然而 感谢 SO 的帮助 有人能够帮助我找到解决方法并创建我自己的颜色图 上一个问题在这里 保存动画 Gif 时 iOS 颜色不正确 https stackoverflow
  • iOS 10 的错误? NSDate 日本地区时间描述和 24 小时休息

    这似乎是 iOS 10 的一个错误 在 iOS 8 和 9 中都可以 NSDate date description 的小时描述是错误的 它附加了 24 小时描述和 12 小时描述 我没有使用 NSDateFormatter 只是默认设置
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项
  • 如何在 Apple Watch Extension/App 和 iOS App 之间建立通信通道

    我正在探索 WatchKit SDK 当我有 WatchKit 应用程序时 是否可以在 WatchKit 应用程序上从 iPhone 应用程序设置值 例如文本 设置 我可以从 iPhone 应用程序调用 WatchKit 应用程序扩展中的函
  • 如何在 Swift 3 中解析 JSON 数组 [重复]

    这个问题在这里已经有答案了 我从 Socket 获取了一些我想访问的数据 但收到错误消息 指出每次都无法将 NSArray 转换为 NSDictionary struct SocketEventHandler let event Strin
  • Swift - 选择值后隐藏 pickerView

    我发现了类似的问题 他们的答案很有帮助 但我坚持最后一件事 我试图在点击字段时显示 pickerView 然后选择数据时 我希望 pickerView 隐藏 我可以从 pickerView 获取数据来隐藏 但是 pickerView 后面仍
  • iOS 8 中的 UISplitViewController 状态恢复

    在 iOS 8 上 UISplitViewController 似乎可以保存和恢复其子视图的状态 例如 主视图是否隐藏 这是不可取的 因为我的应用程序应该始终以横向方式显示主视图 并始终以纵向方式隐藏它 如果用户以横向模式关闭应用程序 保存
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • 线程 1:信号 SIGABRT - AppDelegate.h

    main m Journey Created by Julian Buscema on 2014 07 13 Copyright c 2014 Julian Buscema All rights reserved import
  • Objective C UIImagePNGRepresentation内存问题(使用ARC)

    我有一个基于 ARC 的应用程序 它从 Web 服务加载大约 2 000 个相当大 1 4MB 的 Base64 编码图像 它将 Base64 解码后的字符串转换为 png图像文件并将其保存到磁盘 这一切都是在一个循环中完成的 我不应该有任
  • 重置转换后的 UIView 的原点会变得疯狂

    我使用 UIView transform 旋转 缩放 UIVIew 效果很好 然而 一旦我更改视图的框架原点 即使我没有执行任何进一步的 CGAffineTransforms 视图的内容也会开始 奇怪 地缩放 为什么会出现这种情况 我该如何
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • Xcode 9 中的“addingPercentEncoding”是否损坏?

    在 Swift 3 x 和 Xcode 9 beta 2 中 使用addingPercentEncoding https developer apple com documentation swift string 1690785 addi
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 在 UIMenuItem 上设置accessibilityLabel

    我正在尝试设置accessibilityLabel of a UIMenuItem而且似乎没有效果 无论如何 VoiceOver 只是读取项目的标题 let foo UIMenuItem title foo action selector
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we

随机推荐

  • 如何将 OPENID auth 集成到 REST api 和前端框架架构中

    我目前正在制作一个需要用户登录的网站Steam http steamcommunity com 在他们可以使用我网站的其余功能之前 Steam 目前仅支持 OPENID 进行身份验证 我的做法是按照以下步骤进行 用户按下 使用 Steam
  • python:分割字符串,用管道符号“|”分隔

    看一下下面的字符串 E 1256280 2014 01 05 17 54 00 1 2014 01 05 18 59 53 True 我想把它分开 管道符号 因此我使用以下 python 代码 其中 line 是包含上面描述的字符串的字符串
  • 在 WP7 中打开具有特定 url 的网络浏览器

    我将如何通过单击按钮时的特定网址打开网络浏览器 将以下代码放入按钮 Click 事件处理程序中 var task new Microsoft Phone Tasks WebBrowserTask URL uri task Show
  • 以编程方式添加带有按钮的视图

    我想以编程方式添加一个视图和一个按钮 如下所示 问题是单击按钮时按钮没有反应 我的意思是它既不会突出显示也不会调用选择器 原因是我想为录音 声音文件 实现一个列表行 列表行应该可以选择进行向下钻取 并有一个播放按钮 所以我得到了一个Reco
  • 将给定行移动到 DataFrame 的末尾

    我想从 DataFrame 中获取给定的行并将其添加到相同的 DataFrame 中 我下面的代码就是这样做的 但我不确定我是否以正确的方式这样做 或者是否有更简单 更好 更快的方法 testdf df copy get row targe
  • Jetpack Compose 中具有等高行的网格布局

    喷气背包组成 我想创建一个像 UI 一样具有相同高度行的网格布局 但我找不到用于获取当前可用屏幕尺寸的函数 该应用程序应该看起来像这样 https i stack imgur com TTMQb png 结果应该是这样的 看看上面提到的链接
  • 在 Kotlin 中维护重复值的两个列表的交集

    我想找到两个列表之间公共元素的数量而不消除重复项 例如 input 1 3 3 4 3 3 output 2 因为共同元素是 3 3 input 1 2 3 4 3 3 output 1 因为共同元素是 3 如果我要使用 Kotlin 集合
  • 为什么 psycopg2 和 pyodbc 连接数据库的方式不同?我该如何翻译连接?

    所以我一直在努力寻找一个好的模块来查询我公司的 POSTGRES 数据库中的信息 周围有很多模块 但我似乎只能让 pyodbc 工作 为什么 pyodbc 的连接形式与 psycopg2 不同 后者似乎是更高级的模块 我如何将连接查询从一种
  • 数组索引超出范围的二维数组

    我有一个二维数组 但没有 行数为 1 并且没有 列数 gt 1 double T new double 1 24 System out println T 1 length 但是当我打印列的长度时 它说索引超出范围 但是当我打印以下内容时
  • Android停止录音失败

    我将启动一项服务来开始录音 当我试图停止时 它显示以下消息 06 27 17 21 30 138 E MediaRecorder 6122 stop called in an invalid state 0 我不确定其他功能 例如上传数据到
  • Symfony 表单事件将错误添加到特定字段

    我的场景如下 如果用户从 maxRedemptionForDiscount 中选择 true 并在 maxRedemptionForDiscountValue 中输入 0 则应该有一条错误消息呈现到特定字段 在 TextType 字段的位置
  • 打印机忽略 javax.print.attribute.PrintRequestAttributeSet 选项

    我必须使用 javax print api 打印文件 纯文本 我能够查找打印机并提交打印作业 但我只能打印该文件的一份副本 下面是我一直在使用的代码 打印机无法识别我使用 PrintRequestAttributeSet 指定的任何选项 属
  • 安装的构建工具修订版 28.0.3 已损坏。如何修复此错误

    当我创建一个新项目时 然后构建项目或尝试在模拟器中运行应用程序 使用 sdk api level 28 Android 9 0 Pie 构建输出窗口总是显示此错误 Installed Build Tools revision 28 0 3
  • 创建新线程的测试方法以及我们从事件中获得的结果(NUnit 2.6)

    我的课程有一个公共方法Start 一个私有方法和一个事件Finishing Start call new Thread private method 私有方法使用事件返回值 当这个方法完成工作后 再调用这个事件 现在我想为这个类编写测试 如
  • BASH 脚本暂停/继续脚本内的进程

    在我正在编写的 bash 脚本中 我试图在后台启动一个进程 睡眠 然后挂起它 最后 该过程完成 由于某种原因 当我发送带有停止信号的kill命令时 它只是继续运行 就好像它没有收到任何消息一样 我可以从命令行执行此操作 但 bash 脚本未
  • 应用程序可以在 Android 和 IOS 模拟器中运行,但在发布后不能运行

    Problem 我创建了一个应用程序 它是 MQTT 代理客户端 当我使用 iOS Android 模拟器进行开发时 我与代理的连接工作正常 但是 当我发布 apk 版本时 我的应用程序无法连接 它有套接字问题 AMQJS0007E 套接字
  • 如何在Python中使用OpenSSL从pfx文件中提取密钥?

    我需要签署一份xml与certificate and key from a pfx file 换句话说 我有一个 pfx 文件 我需要从其中提取pem an key签署我的xml 我发现这个脚本可以从 pfx 中提取笔和密钥 但出现错误 i
  • 任意多边形的宽度

    我需要一种方法来表征二维点集的大小 这样我就可以根据视口的比例来确定是否将它们渲染为空间中的单个点或代表性多边形 我已经有一个算法来计算该集合的凸包以生成代表性多边形 但我需要一种方法来表征其大小 一个明显的衡量标准是凸包上点之间的最大距离
  • 子类化 beautifulsoup html 解析器,出现类型错误

    我使用 beautifulsoup 很棒的 html 解析器编写了一个小包装器 最近 我尝试改进代码并使所有 beautifulsoup 方法直接在包装类中可用 而不是通过类属性 我认为子类化 beautifulsoup 解析器将是实现此目
  • 使用 CoreGraphics 在视网膜显示屏上绘图 - 图像像素化

    在我的 iOS 应用程序中 我尝试使用 CoreGraphics 绘制曲线 绘图本身工作正常 但在视网膜显示器上 图像是使用相同的分辨率绘制的 并且像素不会加倍 结果是像素化图像 我正在使用以下函数进行绘图 void touchesMove