Отразить изображение по вертикали (Swift) - PullRequest
0 голосов
/ 26 ноября 2018

Как перевернуть UIImage по вертикали (вверх / вниз)?Этот вопрос задают раньше ...

Я показываю изображение в виде изображения, и его можно рисовать.Для функции стирания я использую UIBezierpath в CAShapeLayer.Обводка CAShapeLayer - это UIColor (patternImage: background) .cgColor, где фон - это то же изображение, что и изображение в представлении изображения.Фон оказался перевернутым.Из других сообщений в 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 .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
}
...