Skip to content

Commit 32d82ab

Browse files
authored
Merge pull request #28 from hyperoslo/feature/pixel-color
Feature: pixel color
2 parents c8b9172 + 334fbc4 commit 32d82ab

File tree

3 files changed

+52
-22
lines changed

3 files changed

+52
-22
lines changed

HueTests/iOS/UIColorTests.swift

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import XCTest
55
class UIColorTests: XCTestCase {
66

77
func testHex() {
8-
let white = UIColor.hex("#FFFFFF")
9-
let black = UIColor.hex("000000")
10-
let red = UIColor.hex("F00")
11-
let blue = UIColor.hex("#00F")
12-
let green = UIColor.hex("#00FF00")
13-
let yellow = UIColor.hex("#FFFF00")
8+
let white = UIColor(hex: "#FFFFFF")
9+
let black = UIColor(hex: "000000")
10+
let red = UIColor(hex: "F00")
11+
let blue = UIColor(hex: "#00F")
12+
let green = UIColor(hex: "#00FF00")
13+
let yellow = UIColor(hex: "#FFFF00")
1414

1515
XCTAssertEqual(white, UIColor(red: 255, green: 255, blue: 255, alpha: 1.0))
1616
XCTAssertEqual(black, UIColor(red: 0, green: 0, blue: 0, alpha: 1.0))
@@ -53,7 +53,7 @@ class UIColorTests: XCTestCase {
5353
}
5454

5555
func testAlpha() {
56-
let yellowWithAlpha = UIColor.hex("#FFFF00").alpha(0.5)
56+
let yellowWithAlpha = UIColor(hex: "#FFFF00").alpha(0.5)
5757

5858
XCTAssertEqual(yellowWithAlpha, UIColor(red: 255, green: 255, blue: 0, alpha: 1.0).colorWithAlphaComponent(0.5))
5959
}
@@ -85,40 +85,40 @@ class UIColorTests: XCTestCase {
8585
CGColorSpaceGetModel(CGColorGetColorSpace(UIColor.yellowColor().CGColor)))
8686
XCTAssertEqual(testGradientWithLocation.locations!, [0.25,1.0])
8787
}
88-
88+
8989
func testComponents() {
9090
let blue = UIColor.blueColor()
9191
let green = UIColor.greenColor()
9292
let red = UIColor.redColor()
9393
let black = UIColor.blackColor()
9494
let white = UIColor.whiteColor()
95-
95+
9696
XCTAssertEqual(blue.redComponent, 0.0)
9797
XCTAssertEqual(blue.greenComponent, 0.0)
9898
XCTAssertEqual(blue.blueComponent, 1.0)
9999
XCTAssertEqual(blue.alphaComponent, 1.0)
100-
100+
101101
XCTAssertEqual(red.redComponent, 1.0)
102102
XCTAssertEqual(red.greenComponent, 0.0)
103103
XCTAssertEqual(red.blueComponent, 0.0)
104104
XCTAssertEqual(red.alphaComponent, 1.0)
105-
105+
106106
XCTAssertEqual(green.redComponent, 0.0)
107107
XCTAssertEqual(green.greenComponent, 1.0)
108108
XCTAssertEqual(green.blueComponent, 0.0)
109109
XCTAssertEqual(green.alphaComponent, 1.0)
110-
110+
111111
XCTAssertEqual(black.redComponent, 0.0)
112112
XCTAssertEqual(black.greenComponent, 0.0)
113113
XCTAssertEqual(black.blueComponent, 0.0)
114114
XCTAssertEqual(black.alphaComponent, 1.0)
115-
115+
116116
XCTAssertEqual(white.redComponent, 1.0)
117117
XCTAssertEqual(white.greenComponent, 1.0)
118118
XCTAssertEqual(white.blueComponent, 1.0)
119119
XCTAssertEqual(white.alphaComponent, 1.0)
120120
}
121-
121+
122122
func testBlending() {
123123
let black = UIColor.blackColor()
124124
let white = UIColor.whiteColor()
@@ -130,17 +130,17 @@ class UIColorTests: XCTestCase {
130130
saturation: 0.1,
131131
brightness: 1.0,
132132
alpha: 1.0)
133-
133+
134134
let testWhite = black.addRGB(white)
135135
XCTAssertEqual(testWhite.redComponent, white.redComponent)
136136
XCTAssertEqual(testWhite.greenComponent, white.greenComponent)
137137
XCTAssertEqual(testWhite.blueComponent, white.blueComponent)
138-
138+
139139
let testYellow = green.addRGB(red)
140140
XCTAssertEqual(testYellow.redComponent, yellow.redComponent)
141141
XCTAssertEqual(testYellow.greenComponent, yellow.greenComponent)
142142
XCTAssertEqual(testYellow.blueComponent, yellow.blueComponent)
143-
143+
144144
let testBlue = deSaturatedBlue.addHue(0.0, saturation: 1.0, brightness: 0.0, alpha: 0.0);
145145
XCTAssertEqual(testBlue.redComponent, blue.redComponent)
146146
XCTAssertEqual(testBlue.greenComponent, blue.greenComponent)

HueTests/iOS/UIImageTests.swift

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@ import XCTest
44

55
class UIImageTests: XCTestCase {
66

7-
func testImageColors() {
8-
let accuracy: CGFloat = 0.001
7+
var image: UIImage!
8+
9+
override func setUp() {
10+
super.setUp()
911
let bundle = NSBundle(forClass: self.classForCoder)
1012
let path = bundle.pathForResource("Random Access Memories", ofType: "png")!
11-
let image = UIImage(contentsOfFile: path)!
1213

14+
image = UIImage(contentsOfFile: path)!
15+
}
16+
17+
func testImageColors() {
1318
XCTAssertNotNil(image)
1419

20+
let accuracy: CGFloat = 0.001
1521
let colors = image.colors()
16-
1722
var (red, green, blue): (CGFloat, CGFloat, CGFloat) = (0,0,0)
18-
23+
1924
colors.background.getRed(&red, green: &green, blue: &blue, alpha: nil)
2025

2126
XCTAssertEqualWithAccuracy(red, 0.035, accuracy: accuracy)
@@ -41,4 +46,10 @@ class UIImageTests: XCTestCase {
4146
XCTAssertEqualWithAccuracy(blue, 0.85, accuracy: accuracy)
4247
}
4348

49+
func testPixelColorSubscript() {
50+
XCTAssertNotNil(image)
51+
XCTAssertNil(image.color(at: CGPoint(x: 1300, y: -1)))
52+
XCTAssertEqual(image.color(at: CGPoint(x: 0, y: 0))?.hex(), "#090D0E")
53+
XCTAssertEqual(image.color(at: CGPoint(x: 535, y: 513))?.hex(), "#C8DDF0")
54+
}
4455
}

Source/iOS/UIImage+Hue.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,23 @@ extension UIImage {
146146
secondaryColor ?? (isDarkBackgound ? whiteColor : blackColor),
147147
detailColor ?? (isDarkBackgound ? whiteColor : blackColor))
148148
}
149+
150+
public func color(at point: CGPoint) -> UIColor? {
151+
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
152+
guard rect.contains(point) else {
153+
return nil
154+
}
155+
156+
let dataProvider = CGImageGetDataProvider(CGImage)
157+
let dataCopy = CGDataProviderCopyData(dataProvider)
158+
let data = CFDataGetBytePtr(dataCopy)
159+
let pixelInfo = (Int(size.width) * Int(point.y) + Int(point.x)) * 4
160+
161+
let red = CGFloat(data[pixelInfo]) / 255.0
162+
let green = CGFloat(data[pixelInfo + 1]) / 255.0
163+
let blue = CGFloat(data[pixelInfo + 2]) / 255.0
164+
let alpha = CGFloat(data[pixelInfo + 3]) / 255.0
165+
166+
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
167+
}
149168
}

0 commit comments

Comments
 (0)