【问题标题】:UIGraphicsBeginImageContext must be Retina-aware?UIGraphicsBeginImageContext 必须是 Retina 感知的?
【发布时间】:2012-07-21 03:19:49
【问题描述】:

我读过一些推荐使用的帖子:

UIGraphicsBeginImageContextWithOptions((image.size), NO, 0.0f) 

代替:

UIGraphicsBeginImageContext(image.size).

因为第一个在绘制时使用 Retina-scale,否则会得到块状图像。

我对何时使用或不使用视网膜比例选项感到有些困惑。

如果我有一张 1000x1000 像素的照片,并且我调用 UIGraphicsBeginImageContext 传递这些尺寸,我是否没有具体指定要绘制多少点?可以吗?

或者我应该调用 UIGraphicsBeginImageContextWithOptions 传递一半的尺寸(500x500px)?有什么区别吗?

【问题讨论】:

  • I've read some posts which recommend the use of... Because the first one uses Retina-scale when drawing, otherwise you get blocky images. - 这个注释对我帮助很大。谢谢!

标签: ios core-graphics core-image


【解决方案1】:

您可以通过以下方法获取您设备的刻度值

[[UIScreen mainScreen] scale]

根据这些信息,您可以决定要绘制多少点。

【讨论】:

  • 我知道,但我现在想要的是,如果使用: UIGraphicsBeginImageContext(1000x1000px) 与使用 UIGraphicsBeginImageContextWithOptions((500x500px), NO, 0.0f) 有什么不同。
  • Retina 不仅在显示图像时很重要,在绘图时不重要吗?我的意思是,我认为图像的大小无关紧要,只要我在显示它时,我将它显示在一半大小(视网膜)的视图中。
  • @jvic 他们都给你一个 1000x1000px 的图像。但我认为不同的是,当使用 UIGraphicsBeginImageContext(1000x1000px) 时,屏幕上显示的绘图是 1000x1000 点,但 UIGraphicsBeginImageContextWithOptions((500x500px), NO, 0.0f) 是 500x500 点,这是我的猜测。
【解决方案2】:

您可以像这样创建图像上下文:

 UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale)

【讨论】:

  • 根据文档:“如果指定值为 0.0,则比例因子设置为设备主屏幕的比例因子。”。因此,在那里使用0.0(而不是UIScreen.mainScreen().scale)具有相同的效果,但会受益于底层优化。
  • 感谢您提供此信息,我看到文档说 scale = 0.0 等于当前屏幕比例,但找不到有关引擎盖优化的任何信息。能详细点吗?
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
相关资源
最近更新 更多