iphone - 在这种情况下,我必须将比例乘以视网膜显示的点值吗?

标签 iphone core-graphics retina-display

自从有了视网膜显示,突然这段绘图代码似乎不再起作用了。绘制的图像比之前稍微偏移,并且显得有些拉伸(stretch)。

我正在 UIControl 子类的 -drawRect: 方法中绘制一些内容。我发现 UIControl 中的当前比例确实是 2.0。此代码从 UIImage 获取 CGImage,它可能不知道有关比例的任何信息。它作为参数提供给一个方法,该方法现在也接受一些点值。

CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);

注意:drawingRect 以点为单位。 NSLog 内的 img.size.width 确实输出正确的点值,而 [img CGImage] 确实输出用于视网膜显示的 @2x 图像。我做了检查来验证这一点:

NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));

控制台输出:图像高度 = 31.000000 (CGImage = 62)

我将如何处理这里的@2x图像?我必须手动将每个值与比例相乘吗?但这也会破坏屏幕上实际可见的矩形,或者不会?

最佳答案

是的。

CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale

或者,您可以使用 -[UIImage drawAtPoint:]-[UIImage drawInRect:] 和其他类似的自动处理比例的方法。如果你下拉到CGImage,你必须自己处理缩放。

关于iphone - 在这种情况下,我必须将比例乘以视网膜显示的点值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745126/

相关文章:

objective-c - 如何判断 CGImageRef 是否完全空白?

iOS:使用 UIBezierPath bezierPathWithOvalInRect 绘制清晰的圆圈:

ios4 - iOS 4。UITouch 的 locationInView 不承认视网膜显示。错误或功能?

iphone - iOS 检测连接速度或类型

iphone - 监控应用程序使用情况

iphone - 使用 setValue : forKey: with an int 时,CoreData 为实体插入新对象时出现错误

iphone - 为什么我的 Quartz 弧线显示比直线粗?

google-chrome-extension - 如何为Retina Mac的浏览器指定Chrome扩展程序图标(弹出图标)

android - 在高 PPI 屏幕上,使用 CSS background-size 在 WebView 中提供模糊图像

iphone - 如何隐藏UITableView中的行分隔符而不隐藏组边框?