缩放UIImage以与CGContextDrawImage一起使用

时间:2015-07-02 20:26:34

标签: ios objective-c uiimage cgcontextdrawimage

我有一个测量480px x 480px的图像,我想在一个使用CGContextDrawImage测量375px x 375px的视图中显示它,如下所示。目前图像没有缩放以适合视图 - 它以全尺寸绘制。如何调整下面的代码以缩放图像以适应视图?

self.image = [UIImage imageNamed:@"image2.png"];
CGContextRef layerContext = CGLayerGetContext(drawingLayer);
CGContextSaveGState(layerContext);
UIGraphicsBeginImageContext (self.viewRect.size);
CGContextTranslateCTM(layerContext, 0, self.image.size.width);
CGContextScaleCTM(layerContext, 1.0, -1.0);
CGContextDrawImage(layerContext, self.viewRect, self.image.CGImage);
UIGraphicsEndImageContext();
CGContextRestoreGState(layerContext);

1 个答案:

答案 0 :(得分:3)

现在您可以使用UIGraphicsImageRenderer,这可以让您摆脱所有CoreGraphics调用的杂草:

CGRect rect = CGRectMake(0, 0, 375, 375);
UIImage *smallImage = [[[UIGraphicsImageRenderer alloc] initWithBounds:rect] imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
    [self.image drawInRect:rect];
}];

但我的原始答案如下。

CGContextDrawImage功能会缩放图像绘制以适合视图。正如此功能的文档所说:

  

将图像绘制到图形上下文中。

     

如果需要,Quartz会对图像进行不成比例的缩放,以适应rect参数指定的范围。

唯一看起来高度怀疑的是:

CGContextTranslateCTM(layerContext, 0, self.image.size.width);

首先,您希望按高度而不是宽度垂直平移。其次,您希望按viewRect的高度进行翻译,而不是image的高度。因此:

CGContextTranslateCTM(layerContext, 0, self.viewRect.size.height);

如果图片仍未正确缩放,我建议您仔细检查viewRect。但是CGContextDrawImage肯定会在指定的CGRect范围内绘制缩放图像。