Портретное изображение искажено - пейзаж просто отлично - PullRequest
0 голосов
/ 24 октября 2019

При использовании пейзажных фотографий они отображаются без проблем. Я переключился на портретные фотографии, и теперь они отображаются вращающимися против часовой стрелки и искаженными, чтобы поместиться в рамку. Я не использую фиксированные числа в коде, поэтому я запутался, почему это происходит.

Я запутался в том, откуда начинается изображение, потому что я знаю, что некоторые программы используют верхний левый угол в качестве источникаи большинство используют внизу слева. Все еще ничего.

Редактировать: Просматривая, когда он загружает изображение, его ширина и высота меняются местами. Это портретное фото, но ширина: 4036, высота: 3024. У кого-нибудь есть идеи, почему это происходит? Изображение загружается в строке 26

import UIKit

public struct RGBAPixel {
    public init(rawVal : UInt32) {
         raw = rawVal
    }
    public var raw: UInt32
    public var red: UInt8 {
        get { return UInt8(raw & 0xFF) }
        set { raw = UInt32(newValue) | (raw & 0xFFFFFF00) }
    }
    public var green: UInt8 {
        get { return UInt8( (raw & 0xFF00) >> 8) }
        set { raw = (UInt32(newValue) << 8) | (raw & 0xFFFF00FF) }
    }
    public var blue: UInt8 {
        get { return UInt8( (raw & 0xFF0000) >> 16) }
        set { raw = (UInt32(newValue) << 16) | (raw & 0xFF00FFFF) }
    }
    public var alpha: UInt8 {
        get { return UInt8( (raw & 0xFF000000) >> 24) }
        set { raw = (UInt32(newValue) << 24) | (raw & 0x00FFFFFF) }
    }
}

let image = UIImage(named: "crossSection2-2.jpeg")

let height = Int((image?.size.height)!)
let width = Int((image?.size.width)!)
let bitsPerComponent = Int(8)
let bytesPerRow = 4 * width
let colorSpace = CGColorSpaceCreateDeviceRGB()
let rawData = UnsafeMutablePointer<RGBAPixel>.allocate(capacity: width * height)
let bitmapInfo: UInt32 = CGBitmapInfo.byteOrder32Big.rawValue | CGImageAlphaInfo.premultipliedLast.rawValue
let CGPointZero = CGPoint(x: 0, y: 0)
let rect = CGRect(origin: CGPointZero, size: (image?.size)!)

let imageContext = CGContext(data: rawData, width: width, height: height, bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo)

imageContext?.draw(image!.cgImage!, in:rect)

let pixels = UnsafeMutableBufferPointer<RGBAPixel>(start: rawData, count: width * height)

let outContext = CGContext(data: pixels.baseAddress, width: width, height: height, bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo)

 let outImage = UIImage(cgImage: outContext!.makeImage()!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...