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..6965c38a9958928bc1b5ab4ce48818b06a9ccab4 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; |
Alexei Svitkine (slow)
2014/05/30 14:56:39
Nit: Put everything in the file into the color_uti
calamity
2014/06/02 03:53:17
Done.
|
@@ -87,6 +89,23 @@ 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|. |
+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 +181,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 +199,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 +217,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) { |