垂直翻转图像(快速)

时间:2018-11-26 12:31:22

标签: ios swift uiimage orientation flip

如何垂直翻转UIImage(向上/向下)?这是之前问过的一个问题...

我正在图像视图中显示图像,并且可以绘制图像。对于擦除功能,我在CAShapeLayer中使用UIBezierpath。 CAShapeLayer的strokeColor是UIColor(patternImage:background).cgColor,其中background是与图像视图中的图像相同的图像。 事实证明背景是颠倒的。从其他Stackoverflow帖子中,我知道这是由于UIKit和Core Graphics使用其他原点作为其坐标系。

我尝试了Stackoverflow帖子中的某些解决方案来翻转背景图片。这些都不在工作:

UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"];
UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage 
                                            scale:sourceImage.scale
                                      orientation:UIImageOrientationUpMirrored];

let ciimage: CIImage = CIImage(CGImage: imagenInicial.CGImage!)
let rotada3 = ciimage.imageByApplyingTransform(CGAffineTransformMakeScale(1, -1))

func flipImageVertically() -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(size, false, scale)
    let bitmap = UIGraphicsGetCurrentContext()!

    bitmap.translateBy(x: size.width / 2, y: size.height / 2)
    bitmap.scaleBy(x: 1.0, y: -1.0)

    bitmap.translateBy(x: -size.width / 2, y: -size.height / 2)
    bitmap.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image
}

我开始通过更改比例并仅观察结果来尝试最后一种解决方案。原来,我的解决方案是我需要使用

bitmap.scaleBy(x: 1.0, y: 1.0)

在函数flipImageVertically()中创建新的上下颠倒图像。

我不明白。通过缩放为1,我以为我什么都没有改变。 我不知道原始图像的imageOrientation是否重要。但是imageOrientation是.up。

我希望有人能解释为什么我可以使用该功能垂直翻转图像

func flipImageVertically() -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(size, false, scale)
    let bitmap = UIGraphicsGetCurrentContext()!

    bitmap.translateBy(x: size.width / 2, y: size.height / 2)
    bitmap.scaleBy(x: 1.0, y: 1.0)

    bitmap.translateBy(x: -size.width / 2, y: -size.height / 2)
    bitmap.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image
}

0 个答案:

没有答案