Lots of updates
- Add unlock - Update Sorting menu - Prepare to load multiple tile images - New logging - Calculate thumbnails and colors before schowing grid
This commit is contained in:
@ -10,13 +10,13 @@ import UIKit
|
||||
|
||||
extension UIColor {
|
||||
|
||||
var rgb: (red: Int, green: Int, blue: Int) {
|
||||
var rgb: (red: Double, green: Double, blue: Double) {
|
||||
var fRed: CGFloat = 0
|
||||
var fGreen: CGFloat = 0
|
||||
var fBlue: CGFloat = 0
|
||||
var fAlpha: CGFloat = 0
|
||||
getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha)
|
||||
return (Int(fRed * 255.0), Int(fGreen * 255.0), Int(fBlue * 255.0))
|
||||
return (Double(fRed), Double(fGreen), Double(fBlue))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,35 @@ extension UIImage {
|
||||
|
||||
extension CIImage {
|
||||
|
||||
func averageColor(context: CIContext) -> UIColor? {
|
||||
let extentVector = CIVector(
|
||||
x: extent.origin.x,
|
||||
y: extent.origin.y,
|
||||
z: extent.size.width,
|
||||
w: extent.size.height)
|
||||
|
||||
guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: self, kCIInputExtentKey: extentVector]) else {
|
||||
log("Failed to create filter")
|
||||
return nil
|
||||
}
|
||||
guard let outputImage = filter.outputImage else {
|
||||
log("Failed get filter output")
|
||||
return nil
|
||||
}
|
||||
|
||||
var bitmap = [UInt8](repeating: 0, count: 4)
|
||||
|
||||
context.render(outputImage, toBitmap: &bitmap, rowBytes: 4,
|
||||
bounds: CGRect(x: 0, y: 0, width: 1, height: 1),
|
||||
format: .RGBA8, colorSpace: nil)
|
||||
|
||||
return UIColor(
|
||||
red: saturate(bitmap[0]),
|
||||
green: saturate(bitmap[1]),
|
||||
blue: saturate(bitmap[2]),
|
||||
alpha: CGFloat(bitmap[3]) / 255)
|
||||
}
|
||||
|
||||
var averageColor: UIColor? {
|
||||
let extentVector = CIVector(
|
||||
x: extent.origin.x,
|
||||
@ -106,8 +135,13 @@ extension CIImage {
|
||||
}
|
||||
|
||||
var bitmap = [UInt8](repeating: 0, count: 4)
|
||||
let context = CIContext(options: [.workingColorSpace: kCFNull!])
|
||||
context.render(outputImage, toBitmap: &bitmap, rowBytes: 4, bounds: CGRect(x: 0, y: 0, width: 1, height: 1), format: .RGBA8, colorSpace: nil)
|
||||
guard let null = kCFNull else {
|
||||
return nil
|
||||
}
|
||||
let context = CIContext(options: [.workingColorSpace: null])
|
||||
context.render(outputImage, toBitmap: &bitmap, rowBytes: 4,
|
||||
bounds: CGRect(x: 0, y: 0, width: 1, height: 1),
|
||||
format: .RGBA8, colorSpace: nil)
|
||||
|
||||
let color = UIColor(
|
||||
red: saturate(bitmap[0]),
|
||||
|
Reference in New Issue
Block a user