问题描述
我正在尝试绘制UIImage的“放大”部分,找不到解决方法...
说我有一个尺寸为1000x1000的图像,并且放大到左上角(x:0,y:0宽度:500,高度:500),我想将该部分绘制为另一幅1000x1000图像。 / p>
我正在使用UIGraphicsImageRenderer
,但UIImage draw
方法不接受任何源矩形,仅接受目标rect(并绘制整个图像)。
我可以通过在draw
方法中指定一个更大的rect来实现我想要的功能,但是当放大级别很大(内存不足)时,该功能会崩溃。
这是我尝试过的:
let srcImg: UIImage = {some UIImage sized 1000x1000}
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 1000,height: 1000))
let scaled = renderer.image { ctx in
srcImg.draw(in: CGRect(origin: CGPoint.zero,size: CGSize(width: 2000,height: 2000)))
}
基本上,我正在尝试实现类似HTML5 canvas的drawImage
API的功能,该API同时获得src和dst矩形...
谢谢。
解决方法
使用以下答案中的UIImage
扩展名:https://stackoverflow.com/a/28513086/6257435
如果我正确理解了您的问题-您想从1000x1000的图片中裁剪左上500x500像素,并将其放大到1000x1000-这是使用该扩展名的简单示例:
if let img1000x1000 = UIImage(named: "img1000x1000") {
if let topLeft500x500 = img1000x1000.cropped(to: CGRect(x: 0,y: 0,width: 500,height: 500)) {
if let new1000x1000 = topLeft500x500.filled(to: CGSize(width: 1000,height: 1000)) {
// do something with new 1000x1000 image
print()
}
}
}