是否可以通过 Aspect Fit 调整大小在 Core Graphics 中显示图像?
Posted
技术标签:
【中文标题】是否可以通过 Aspect Fit 调整大小在 Core Graphics 中显示图像?【英文标题】:Is it possible to display an image in Core Graphics with an Aspect Fit resize? 【发布时间】:2012-01-14 22:19:34 【问题描述】:CALayer 可以做到,UIImageView 可以做到。我可以使用 Core Graphics 直接显示具有宽高比的图像吗? UIImage drawInRect 不允许我设置调整大小机制。
【问题讨论】:
【参考方案1】:如果您已经在链接 AVFoundation,则在该框架中提供了一个方面适应功能:
CGRect AVMakeRectWithAspectRatioInsideRect(CGSize aspectRatio, CGRect boundingRect);
例如,缩放图像以适应:
UIImage *image = …;
CRect targetBounds = self.layer.bounds;
// fit the image, preserving its aspect ratio, into our target bounds
CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(image.size,
targetBounds);
// draw the image
CGContextDrawImage(context, imageRect, image.CGImage);
【讨论】:
同意。 @PhilCalvin 是英雄。【参考方案2】:您需要自己计算。例如:
// desired maximum width/height of your image
UIImage *image = self.imageToDraw;
CGRect imageRect = CGRectMake(10, 10, 42, 42); // desired x/y coords, with maximum width/height
// calculate resize ratio, and apply to rect
CGFloat ratio = MIN(imageRect.size.width / image.size.width, imageRect.size.height / image.size.height);
imageRect.size.width = imageRect.size.width * ratio;
imageRect.size.height = imageRect.size.height * ratio;
// draw the image
CGContextDrawImage(context, imageRect, image.CGImage);
或者,您可以嵌入UIImageView
作为视图的子视图,这为您提供了易于使用的选项。为了类似的易用性但更好的性能,您可以在视图层中嵌入包含图像的层。如果您选择走这条路,这两种方法中的任何一种都值得单独提出一个问题。
【讨论】:
请注意,根据图像,此代码原样变为适合,而不是方面适合。【参考方案3】:当然可以。它会在您通过的任何矩形中绘制图像。所以只需传递一个适合方面的矩形。当然,您必须自己做一些数学运算,但这很容易。
【讨论】:
【参考方案4】:解决办法
CGSize imageSize = yourImage.size;
CGSize viewSize = CGSizeMake(450, 340); // size in which you want to draw
float hfactor = imageSize.width / viewSize.width;
float vfactor = imageSize.height / viewSize.height;
float factor = fmax(hfactor, vfactor);
// Divide the size by the greater of the vertical or horizontal shrinkage factor
float newWidth = imageSize.width / factor;
float newHeight = imageSize.height / factor;
CGRect newRect = CGRectMake(xOffset,yOffset, newWidth, newHeight);
[image drawInRect:newRect];
-- 礼貌https://***.com/a/1703210
【讨论】:
以上是关于是否可以通过 Aspect Fit 调整大小在 Core Graphics 中显示图像?的主要内容,如果未能解决你的问题,请参考以下文章
调整动画大小后UIButton不尊重Aspect Fill contentMode
AutoLayout:UIImageView 和 Aspect Fit 内容模式
文本字段背景图像 Aspect fit 限制了 swiftUI 中 iPad 的宽度
当表格视图滚动时,UIImageView Aspect to Fit 不起作用