0

设计师给我这样的图片在此处输入图像描述

但是当我使用drawInRect API在上下文中绘制图片时,图片是这样的在此处输入图像描述

矩形的大小就是图像的大小。图像是@1x 和@2x。

区别很明显,图片模糊,图片右侧有一条灰线,我的imac是retina分辨率。

================================================= 我有找到了原因,

[self.headLeftImage drawInRect:NSMakeRect(100,
                                        100,
                                        self.headLeftImage.size.width,
                                        self.headLeftImage.size.height)];




CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
CGContextSaveGState(context);
CGContextTranslateCTM(context, self.center.x , self.center.y);

[self.headLeftImage drawInRect:NSMakeRect(100,
                                        100,
                                        self.headLeftImage.size.width,
                                        self.headLeftImage.size.height)];
CGContextRestoreGState(context);

并且在第一次绘制时图像不会模糊,但在平移后图像是模糊的。就像图片一样:在此处输入图像描述

4

1 回答 1

1

问题是您正在将上下文转换为非整数像素位置。然后,抽奖尊重您将图像放置在非整数位置的请求,这会导致它被消除锯齿并在某些像素中部分着色。

您应该将中心点转换为设备空间,对其进行积分(例如使用floor()),然后将其转换回来。使用CGContextConvertPointToDeviceSpace()CGContextConvertPointToUserSpace()进行转换。这对 Retina 和非 Retina 显示器来说是正确的。

于 2016-01-06T02:43:01.897 回答