UIGraphicsBeginImageContext必须支持Retina屏幕吗?

20

我读了一些帖子,建议使用:

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

改用:

UIGraphicsBeginImageContext(image.size).

因为第一种方法在绘制时使用了Retina比例,否则会得到方块状的图像。

我有些困惑什么时候需要使用Retina比例选项。

如果我有一张1000x1000像素的照片,并调用UIGraphicsBeginImageContext传递这些尺寸,那我不是已经明确指定要绘制多少个点了吗?这样做可以吗?

或者我应该调用UIGraphicsBeginImageContextWithOptions并传递一半的尺寸(500x500像素)?这样做有什么区别吗?


1
我读了一些帖子,推荐使用...因为第一个在绘制时使用Retina比例,否则会得到方块状的图像。这个笔记对我帮助很大。谢谢! - Dannie P
2个回答

15

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

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

2
根据文档所述:“如果您指定值为0.0,则缩放因子将设置为设备主屏幕的缩放因子。” 因此,在那里使用0.0而不是UIScreen.mainScreen().scale具有相同的效果,但会从底层优化中受益。 - Bastiaan M. van de Weerd
谢谢您提供这些信息,我看到文档中说 scale = 0.0 等于当前屏幕比例,但是没有找到有关底层优化的任何信息。您能详细说明一下吗? - the Reverend

12

您可以通过以下方法获取设备的比例值。

[[UIScreen mainScreen] scale]

通过这些信息,您可以决定想要绘制多少个点。


我知道,但我想知道的是使用UIGraphicsBeginImageContext(1000x1000px)与使用UIGraphicsBeginImageContextWithOptions((500x500px),NO,0.0f)是否有任何区别。 - jvic
视网膜屏幕只有在显示图像而非绘制图像时才重要,对吧?我的意思是,我认为图像的大小并不重要,只要我在一个尺寸为原尺寸一半(视网膜)的视图中显示它就可以了。 - jvic
1
@jvic它们都提供了一个1000x1000像素的图像。但我认为不同之处在于,当使用UIGraphicsBeginImageContext(1000x1000px)时,屏幕上显示的绘图是以1000x1000点的形式展示的,而使用UIGraphicsBeginImageContextWithOptions((500x500px),NO,0.0f)则是以500x500点的形式展示的,这只是我的猜测。 - lu yuan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接