Nsimage 在矩形中绘制但图像模糊?
Nsimage draw in rect but the image is blurry?
设计师给我这样的图
但是当我用drawInRect API在context中绘制图片时,图片是这样的
矩形的大小正好是image.And图像的大小@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);
并且第一次绘制时图像不会模糊,但翻译后图像会模糊。就像图片一样:
问题是您将上下文转换为 non-integral 像素位置。然后,抽奖将尊重您将图像放在 non-integral 位置的请求,这会导致它成为 anti-aliased 并且部分像素会着色。
您应该将中心点转换为设备 space,integral-ize 它(例如通过使用 floor()
),然后再将其转换回来。使用 CGContextConvertPointToDeviceSpace()
和 CGContextConvertPointToUserSpace()
进行转换。这对 Retina 和 non-Retina 显示器来说是正确的。
设计师给我这样的图
但是当我用drawInRect API在context中绘制图片时,图片是这样的
矩形的大小正好是image.And图像的大小@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);
并且第一次绘制时图像不会模糊,但翻译后图像会模糊。就像图片一样:
问题是您将上下文转换为 non-integral 像素位置。然后,抽奖将尊重您将图像放在 non-integral 位置的请求,这会导致它成为 anti-aliased 并且部分像素会着色。
您应该将中心点转换为设备 space,integral-ize 它(例如通过使用 floor()
),然后再将其转换回来。使用 CGContextConvertPointToDeviceSpace()
和 CGContextConvertPointToUserSpace()
进行转换。这对 Retina 和 non-Retina 显示器来说是正确的。