如何垂直翻转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
}