Я пробую и UIImage, и CIImage, с теми же результатами. Приведенный ниже пример протестирован на моем iPhone 14 Pro (не в симуляторе).
Раскадровка для приведенного ниже кода имеет три элемента UIImageView (верхний, средний и нижний).
Код: Выделить всё
let fileURL = Bundle.main.url(forResource: "IMG_6972", withExtension:"HEIC")!
var config = UIImageReader.Configuration()
config.prefersHighDynamicRange = true
let imageReader = UIImageReader(configuration: config)
let topImage = imageReader.image(contentsOf: fileURL)!
topImageView.preferredImageDynamicRange = .high
topImageView.image = topImage
// The image appears, looks SDR
print("topImage.isHighDynamicRange: \(topImage.isHighDynamicRange)") // true
let ciimage = CIImage(contentsOf: fileURL)!
bottomImageView.image = UIImage(ciImage: ciimage)
// The image appears, looks SDR - identical to topImage
print("color space: \(ciimage.colorSpace!)") // (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; Display P3)
let gainMap = CIImage(contentsOf: fileURL, options: [.auxiliaryHDRGainMap: true])!
middleImageView.image = UIImage(ciImage: gainMap)
// The gain map image appears as expected
Код: Выделить всё
let sdrImage = UIImage(named: "IMG_6972.HEIC")! // UIImage.named doesn't support HDR
print("sdrImage.isHighDynamicRange: \(sdrImage.isHighDynamicRange)")``` // false, as expected
bottomImageView.image = sdrImage
Я также отслеживаю использование EDR UIScreen с помощью:
Код: Выделить всё
print("currentEDR: \(UIScreen.main.currentEDRHeadroom)")
print("maxEDR: \(UIScreen.main.potentialEDRHeadroom)")
Нужно ли мне сделать что-то особенное, чтобы установить UIViewController, UIScreen или UIApplication (и т. д.) быть «Режимом HDR» или чем-то подобным?
Подробнее здесь: https://stackoverflow.com/questions/786 ... amic-range