Index: ui/gfx/color_analysis_unittest.cc |
diff --git a/ui/gfx/color_analysis_unittest.cc b/ui/gfx/color_analysis_unittest.cc |
index 9592d0d38cd496aed15936997d1cdf122ce491bf..645224ed7b4e2f0b498cf8038913c20ba5a0d0fe 100644 |
--- a/ui/gfx/color_analysis_unittest.cc |
+++ b/ui/gfx/color_analysis_unittest.cc |
@@ -10,6 +10,8 @@ |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "third_party/skia/include/core/SkColor.h" |
#include "ui/gfx/canvas.h" |
+#include "ui/gfx/color_utils.h" |
+#include "ui/gfx/image/image.h" |
#include "ui/gfx/rect.h" |
using color_utils::FindClosestColor; |
@@ -87,6 +89,22 @@ const unsigned char k1x3BlueRed[] = { |
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 |
}; |
+const color_utils::HSL kDefaultLowerBound = {-1, -1, 0.15}; |
+const color_utils::HSL kDefaultUpperBound = {-1, -1, 0.85}; |
+ |
+// Creates a 1 dimensional png of the pixel colors found in |colors|. |
Matt Giuca
2014/05/22 05:03:52
Nit: 1-dimensional.
calamity
2014/05/22 07:36:36
Done.
|
+scoped_refptr<base::RefCountedMemory> CreateTestPNG( |
+ const std::vector<SkColor>& colors) { |
+ SkBitmap bitmap; |
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, colors.size(), 1); |
+ bitmap.allocPixels(); |
+ SkAutoLockPixels lock(bitmap); |
+ for (size_t i = 0; i < colors.size(); ++i) { |
+ bitmap.eraseArea(SkIRect::MakeXYWH(i, 0, 1, 1), colors[i]); |
+ } |
+ return gfx::Image::CreateFrom1xBitmap(bitmap).As1xPNGBytes(); |
+} |
+ |
class MockKMeanImageSampler : public color_utils::KMeanImageSampler { |
public: |
MockKMeanImageSampler() : current_result_index_(0) { |
@@ -162,13 +180,13 @@ TEST_F(ColorAnalysisTest, CalculatePNGKMeanAllWhite) { |
k1x1White, |
k1x1White + sizeof(k1x1White) / sizeof(unsigned char)))); |
- SkColor color = |
- color_utils::CalculateKMeanColorOfPNG(png, 100, 600, &test_sampler); |
+ SkColor color = color_utils::CalculateKMeanColorOfPNG( |
+ png, kDefaultLowerBound, kDefaultUpperBound, &test_sampler); |
EXPECT_EQ(color, SK_ColorWHITE); |
} |
-TEST_F(ColorAnalysisTest, CalculatePNGKMeanIgnoreWhite) { |
+TEST_F(ColorAnalysisTest, CalculatePNGKMeanIgnoreWhiteLightness) { |
MockKMeanImageSampler test_sampler; |
test_sampler.AddSample(0); |
test_sampler.AddSample(1); |
@@ -180,10 +198,10 @@ TEST_F(ColorAnalysisTest, CalculatePNGKMeanIgnoreWhite) { |
k1x3BlueWhite, |
k1x3BlueWhite + sizeof(k1x3BlueWhite) / sizeof(unsigned char)))); |
- SkColor color = |
- color_utils::CalculateKMeanColorOfPNG(png, 100, 600, &test_sampler); |
+ SkColor color = color_utils::CalculateKMeanColorOfPNG( |
+ png, kDefaultLowerBound, kDefaultUpperBound, &test_sampler); |
- EXPECT_EQ(color, SkColorSetARGB(0xFF, 0x00, 0x00, 0xFF)); |
+ EXPECT_EQ(SkColorSetARGB(0xFF, 0x00, 0x00, 0xFF), color); |
} |
TEST_F(ColorAnalysisTest, CalculatePNGKMeanPickMostCommon) { |
@@ -198,10 +216,49 @@ TEST_F(ColorAnalysisTest, CalculatePNGKMeanPickMostCommon) { |
k1x3BlueRed, |
k1x3BlueRed + sizeof(k1x3BlueRed) / sizeof(unsigned char)))); |
+ SkColor color = color_utils::CalculateKMeanColorOfPNG( |
+ png, kDefaultLowerBound, kDefaultUpperBound, &test_sampler); |
+ |
+ EXPECT_EQ(SkColorSetARGB(0xFF, 0xFF, 0x00, 0x00), color); |
+} |
+ |
+TEST_F(ColorAnalysisTest, CalculatePNGKMeanIgnoreRedHue) { |
+ MockKMeanImageSampler test_sampler; |
+ test_sampler.AddSample(0); |
+ test_sampler.AddSample(1); |
+ test_sampler.AddSample(2); |
+ |
+ std::vector<SkColor> colors(4, SK_ColorRED); |
+ colors[1] = SK_ColorBLUE; |
+ |
+ scoped_refptr<base::RefCountedMemory> png = CreateTestPNG(colors); |
+ |
+ SkColor color = |
+ color_utils::CalculateKMeanColorOfPNG(png, |
+ color_utils::HSL{0.2, -1, 0.15}, |
+ color_utils::HSL{0.8, -1, 0.85}, |
+ &test_sampler); |
+ |
+ EXPECT_EQ(SK_ColorBLUE, color); |
+} |
+ |
+TEST_F(ColorAnalysisTest, CalculatePNGKMeanIgnoreGreySaturation) { |
+ MockKMeanImageSampler test_sampler; |
+ test_sampler.AddSample(0); |
+ test_sampler.AddSample(1); |
+ test_sampler.AddSample(2); |
+ |
+ std::vector<SkColor> colors(4, SK_ColorGRAY); |
+ colors[1] = SK_ColorBLUE; |
+ |
+ scoped_refptr<base::RefCountedMemory> png = CreateTestPNG(colors); |
SkColor color = |
- color_utils::CalculateKMeanColorOfPNG(png, 100, 600, &test_sampler); |
+ color_utils::CalculateKMeanColorOfPNG(png, |
+ color_utils::HSL{-1, 0.3, -1}, |
+ color_utils::HSL{-1, 1, -1}, |
+ &test_sampler); |
- EXPECT_EQ(color, SkColorSetARGB(0xFF, 0xFF, 0x00, 0x00)); |
+ EXPECT_EQ(SK_ColorBLUE, color); |
} |
TEST_F(ColorAnalysisTest, GridSampler) { |