mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +00:00
Restore wide color
This commit is contained in:
parent
b0c78bf1df
commit
30b6b7106b
@ -372,33 +372,88 @@ public enum DrawingContextBltMode {
|
|||||||
case Alpha
|
case Alpha
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct DeviceGraphicsContextSettings {
|
public func getSharedDevideGraphicsContextSettings() -> DeviceGraphicsContextSettings {
|
||||||
public static let shared: DeviceGraphicsContextSettings = {
|
struct OpaqueSettings {
|
||||||
|
let rowAlignment: Int
|
||||||
|
let bitsPerPixel: Int
|
||||||
|
let bitsPerComponent: Int
|
||||||
|
let opaqueBitmapInfo: CGBitmapInfo
|
||||||
|
let colorSpace: CGColorSpace
|
||||||
|
|
||||||
|
init(context: CGContext) {
|
||||||
|
self.rowAlignment = context.bytesPerRow
|
||||||
|
self.bitsPerPixel = context.bitsPerPixel
|
||||||
|
self.bitsPerComponent = context.bitsPerComponent
|
||||||
|
self.opaqueBitmapInfo = context.bitmapInfo
|
||||||
|
if #available(iOS 10.0, *) {
|
||||||
|
if UIScreen.main.traitCollection.displayGamut == .P3 {
|
||||||
|
self.colorSpace = CGColorSpace(name: CGColorSpace.displayP3) ?? context.colorSpace!
|
||||||
|
} else {
|
||||||
|
self.colorSpace = context.colorSpace!
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.colorSpace = context.colorSpace!
|
||||||
|
}
|
||||||
|
assert(self.rowAlignment == 32)
|
||||||
|
assert(self.bitsPerPixel == 32)
|
||||||
|
assert(self.bitsPerComponent == 8)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TransparentSettings {
|
||||||
|
let transparentBitmapInfo: CGBitmapInfo
|
||||||
|
|
||||||
|
init(context: CGContext) {
|
||||||
|
self.transparentBitmapInfo = context.bitmapInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var opaqueSettings: OpaqueSettings?
|
||||||
|
var transparentSettings: TransparentSettings?
|
||||||
|
|
||||||
|
if #available(iOS 10.0, *) {
|
||||||
|
let opaqueFormat = UIGraphicsImageRendererFormat()
|
||||||
|
let transparentFormat = UIGraphicsImageRendererFormat()
|
||||||
|
if #available(iOS 12.0, *) {
|
||||||
|
opaqueFormat.preferredRange = .standard
|
||||||
|
transparentFormat.preferredRange = .standard
|
||||||
|
}
|
||||||
|
opaqueFormat.opaque = true
|
||||||
|
transparentFormat.opaque = false
|
||||||
|
|
||||||
|
let opaqueRenderer = UIGraphicsImageRenderer(bounds: CGRect(origin: CGPoint(), size: CGSize(width: 1.0, height: 1.0)), format: opaqueFormat)
|
||||||
|
let _ = opaqueRenderer.image(actions: { context in
|
||||||
|
opaqueSettings = OpaqueSettings(context: context.cgContext)
|
||||||
|
})
|
||||||
|
|
||||||
|
let transparentRenderer = UIGraphicsImageRenderer(bounds: CGRect(origin: CGPoint(), size: CGSize(width: 1.0, height: 1.0)), format: transparentFormat)
|
||||||
|
let _ = transparentRenderer.image(actions: { context in
|
||||||
|
transparentSettings = TransparentSettings(context: context.cgContext)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1.0, height: 1.0), true, 1.0)
|
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1.0, height: 1.0), true, 1.0)
|
||||||
let refContext = UIGraphicsGetCurrentContext()!
|
let refContext = UIGraphicsGetCurrentContext()!
|
||||||
let bytesPerRow = refContext.bytesPerRow
|
opaqueSettings = OpaqueSettings(context: refContext)
|
||||||
let bitsPerPixel = refContext.bitsPerPixel
|
|
||||||
let bitsPerComponent = refContext.bitsPerComponent
|
|
||||||
let opaqueBitmapInfo = refContext.bitmapInfo
|
|
||||||
let image = UIGraphicsGetImageFromCurrentImageContext()!
|
|
||||||
let colorSpace = image.cgImage!.colorSpace!
|
|
||||||
assert(bytesPerRow == 32)
|
|
||||||
UIGraphicsEndImageContext()
|
UIGraphicsEndImageContext()
|
||||||
|
|
||||||
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1.0, height: 1.0), false, 1.0)
|
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1.0, height: 1.0), false, 1.0)
|
||||||
let refCtxTransparent = UIGraphicsGetCurrentContext()!
|
let refCtxTransparent = UIGraphicsGetCurrentContext()!
|
||||||
let transparentBitmapInfo = refCtxTransparent.bitmapInfo
|
transparentSettings = TransparentSettings(context: refCtxTransparent)
|
||||||
UIGraphicsEndImageContext()
|
UIGraphicsEndImageContext()
|
||||||
|
}
|
||||||
|
|
||||||
return DeviceGraphicsContextSettings(
|
return DeviceGraphicsContextSettings(
|
||||||
rowAlignment: bytesPerRow,
|
rowAlignment: opaqueSettings!.rowAlignment,
|
||||||
bitsPerPixel: bitsPerPixel,
|
bitsPerPixel: opaqueSettings!.bitsPerPixel,
|
||||||
bitsPerComponent: bitsPerComponent,
|
bitsPerComponent: opaqueSettings!.bitsPerComponent,
|
||||||
opaqueBitmapInfo: opaqueBitmapInfo,
|
opaqueBitmapInfo: opaqueSettings!.opaqueBitmapInfo,
|
||||||
transparentBitmapInfo: transparentBitmapInfo,
|
transparentBitmapInfo: transparentSettings!.transparentBitmapInfo,
|
||||||
colorSpace: colorSpace
|
colorSpace: opaqueSettings!.colorSpace
|
||||||
)
|
)
|
||||||
}()
|
}
|
||||||
|
|
||||||
|
public struct DeviceGraphicsContextSettings {
|
||||||
|
public static let shared: DeviceGraphicsContextSettings = getSharedDevideGraphicsContextSettings()
|
||||||
|
|
||||||
public let rowAlignment: Int
|
public let rowAlignment: Int
|
||||||
public let bitsPerPixel: Int
|
public let bitsPerPixel: Int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user