| Index: ui/gfx/color_analysis.cc
|
| diff --git a/ui/gfx/color_analysis.cc b/ui/gfx/color_analysis.cc
|
| index f23da853e43f119bf7ebb7e38d95db9f62f5b22d..354ca84bdabee492c8309c3d7262b2e718985eed 100644
|
| --- a/ui/gfx/color_analysis.cc
|
| +++ b/ui/gfx/color_analysis.cc
|
| @@ -40,26 +40,26 @@ class KMeanCluster {
|
| }
|
|
|
| void Reset() {
|
| - centroid[0] = centroid[1] = centroid[2] = 0;
|
| - aggregate[0] = aggregate[1] = aggregate[2] = 0;
|
| - counter = 0;
|
| - weight = 0;
|
| + centroid_[0] = centroid_[1] = centroid_[2] = 0;
|
| + aggregate_[0] = aggregate_[1] = aggregate_[2] = 0;
|
| + counter_ = 0;
|
| + weight_ = 0;
|
| }
|
|
|
| inline void SetCentroid(uint8_t r, uint8_t g, uint8_t b) {
|
| - centroid[0] = r;
|
| - centroid[1] = g;
|
| - centroid[2] = b;
|
| + centroid_[0] = r;
|
| + centroid_[1] = g;
|
| + centroid_[2] = b;
|
| }
|
|
|
| inline void GetCentroid(uint8_t* r, uint8_t* g, uint8_t* b) {
|
| - *r = centroid[0];
|
| - *g = centroid[1];
|
| - *b = centroid[2];
|
| + *r = centroid_[0];
|
| + *g = centroid_[1];
|
| + *b = centroid_[2];
|
| }
|
|
|
| inline bool IsAtCentroid(uint8_t r, uint8_t g, uint8_t b) {
|
| - return r == centroid[0] && g == centroid[1] && b == centroid[2];
|
| + return r == centroid_[0] && g == centroid_[1] && b == centroid_[2];
|
| }
|
|
|
| // Recomputes the centroid of the cluster based on the aggregate data. The
|
| @@ -67,30 +67,30 @@ class KMeanCluster {
|
| // purposes. The aggregate and counter are then cleared to be ready for the
|
| // next iteration.
|
| inline void RecomputeCentroid() {
|
| - if (counter > 0) {
|
| - centroid[0] = aggregate[0] / counter;
|
| - centroid[1] = aggregate[1] / counter;
|
| - centroid[2] = aggregate[2] / counter;
|
| -
|
| - aggregate[0] = aggregate[1] = aggregate[2] = 0;
|
| - weight = counter;
|
| - counter = 0;
|
| + if (counter_ > 0) {
|
| + centroid_[0] = static_cast<uint8_t>(aggregate_[0] / counter_);
|
| + centroid_[1] = static_cast<uint8_t>(aggregate_[1] / counter_);
|
| + centroid_[2] = static_cast<uint8_t>(aggregate_[2] / counter_);
|
| +
|
| + aggregate_[0] = aggregate_[1] = aggregate_[2] = 0;
|
| + weight_ = counter_;
|
| + counter_ = 0;
|
| }
|
| }
|
|
|
| inline void AddPoint(uint8_t r, uint8_t g, uint8_t b) {
|
| - aggregate[0] += r;
|
| - aggregate[1] += g;
|
| - aggregate[2] += b;
|
| - ++counter;
|
| + aggregate_[0] += r;
|
| + aggregate_[1] += g;
|
| + aggregate_[2] += b;
|
| + ++counter_;
|
| }
|
|
|
| // Just returns the distance^2. Since we are comparing relative distances
|
| // there is no need to perform the expensive sqrt() operation.
|
| inline uint32_t GetDistanceSqr(uint8_t r, uint8_t g, uint8_t b) {
|
| - return (r - centroid[0]) * (r - centroid[0]) +
|
| - (g - centroid[1]) * (g - centroid[1]) +
|
| - (b - centroid[2]) * (b - centroid[2]);
|
| + return (r - centroid_[0]) * (r - centroid_[0]) +
|
| + (g - centroid_[1]) * (g - centroid_[1]) +
|
| + (b - centroid_[2]) * (b - centroid_[2]);
|
| }
|
|
|
| // In order to determine if we have hit convergence or not we need to see
|
| @@ -98,18 +98,18 @@ class KMeanCluster {
|
| // not the centroid is the same as the aggregate sum of points that will be
|
| // used to generate the next centroid.
|
| inline bool CompareCentroidWithAggregate() {
|
| - if (counter == 0)
|
| + if (counter_ == 0)
|
| return false;
|
|
|
| - return aggregate[0] / counter == centroid[0] &&
|
| - aggregate[1] / counter == centroid[1] &&
|
| - aggregate[2] / counter == centroid[2];
|
| + return aggregate_[0] / counter_ == centroid_[0] &&
|
| + aggregate_[1] / counter_ == centroid_[1] &&
|
| + aggregate_[2] / counter_ == centroid_[2];
|
| }
|
|
|
| // Returns the previous counter, which is used to determine the weight
|
| // of the cluster for sorting.
|
| inline uint32_t GetWeight() const {
|
| - return weight;
|
| + return weight_;
|
| }
|
|
|
| static bool SortKMeanClusterByWeight(const KMeanCluster& a,
|
| @@ -118,16 +118,16 @@ class KMeanCluster {
|
| }
|
|
|
| private:
|
| - uint8_t centroid[3];
|
| + uint8_t centroid_[3];
|
|
|
| // Holds the sum of all the points that make up this cluster. Used to
|
| // generate the next centroid as well as to check for convergence.
|
| - uint32_t aggregate[3];
|
| - uint32_t counter;
|
| + uint32_t aggregate_[3];
|
| + uint32_t counter_;
|
|
|
| // The weight of the cluster, determined by how many points were used
|
| // to generate the previous centroid.
|
| - uint32_t weight;
|
| + uint32_t weight_;
|
| };
|
|
|
| // Un-premultiplies each pixel in |bitmap| into an output |buffer|.
|
| @@ -468,24 +468,33 @@ gfx::Matrix3F ComputeColorCovariance(const SkBitmap& bitmap) {
|
| // of R, G and B channels with (R, G, B)
|
| int pixel_n = bitmap.width() * bitmap.height();
|
| covariance.set(
|
| - (static_cast<double>(rr_sum) / pixel_n -
|
| - static_cast<double>(r_sum * r_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(rg_sum) / pixel_n -
|
| - static_cast<double>(r_sum * g_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(rb_sum) / pixel_n -
|
| - static_cast<double>(r_sum * b_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(rg_sum) / pixel_n -
|
| - static_cast<double>(r_sum * g_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(gg_sum) / pixel_n -
|
| - static_cast<double>(g_sum * g_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(gb_sum) / pixel_n -
|
| - static_cast<double>(g_sum * b_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(rb_sum) / pixel_n -
|
| - static_cast<double>(r_sum * b_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(gb_sum) / pixel_n -
|
| - static_cast<double>(g_sum * b_sum) / pixel_n / pixel_n),
|
| - (static_cast<double>(bb_sum) / pixel_n -
|
| - static_cast<double>(b_sum * b_sum) / pixel_n / pixel_n));
|
| + static_cast<float>(
|
| + static_cast<double>(rr_sum) / pixel_n -
|
| + static_cast<double>(r_sum * r_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(rg_sum) / pixel_n -
|
| + static_cast<double>(r_sum * g_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(rb_sum) / pixel_n -
|
| + static_cast<double>(r_sum * b_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(rg_sum) / pixel_n -
|
| + static_cast<double>(r_sum * g_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(gg_sum) / pixel_n -
|
| + static_cast<double>(g_sum * g_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(gb_sum) / pixel_n -
|
| + static_cast<double>(g_sum * b_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(rb_sum) / pixel_n -
|
| + static_cast<double>(r_sum * b_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(gb_sum) / pixel_n -
|
| + static_cast<double>(g_sum * b_sum) / pixel_n / pixel_n),
|
| + static_cast<float>(
|
| + static_cast<double>(bb_sum) / pixel_n -
|
| + static_cast<double>(b_sum * b_sum) / pixel_n / pixel_n));
|
| return covariance;
|
| }
|
|
|
| @@ -529,9 +538,9 @@ bool ApplyColorReduction(const SkBitmap& source_bitmap,
|
| else
|
| c = source_color_row[x];
|
|
|
| - float r = SkColorGetR(c);
|
| - float g = SkColorGetG(c);
|
| - float b = SkColorGetB(c);
|
| + uint8_t r = SkColorGetR(c);
|
| + uint8_t g = SkColorGetG(c);
|
| + uint8_t b = SkColorGetB(c);
|
| float gray_level = tr * r + tg * g + tb * b;
|
| max_val = std::max(max_val, gray_level);
|
| min_val = std::min(min_val, gray_level);
|
| @@ -542,7 +551,7 @@ bool ApplyColorReduction(const SkBitmap& source_bitmap,
|
| float scale = 0.0;
|
| t0 = -min_val;
|
| if (max_val > min_val)
|
| - scale = 255.0 / (max_val - min_val);
|
| + scale = 255.0f / (max_val - min_val);
|
| t0 *= scale;
|
| tr *= scale;
|
| tg *= scale;
|
| @@ -561,9 +570,9 @@ bool ApplyColorReduction(const SkBitmap& source_bitmap,
|
| else
|
| c = source_color_row[x];
|
|
|
| - float r = SkColorGetR(c);
|
| - float g = SkColorGetG(c);
|
| - float b = SkColorGetB(c);
|
| + uint8_t r = SkColorGetR(c);
|
| + uint8_t g = SkColorGetG(c);
|
| + uint8_t b = SkColorGetB(c);
|
|
|
| float gl = t0 + tr * r + tg * g + tb * b;
|
| if (gl < 0)
|
|
|