缩放绘制UIImage并进行平移

问题描述

我正在尝试绘制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()
            }
        }
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...