You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by da...@apache.org on 2012/09/26 05:19:10 UTC
svn commit: r1390266 - in
/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette:
ColorSpaceSubset.java PaletteFactory.java
Author: damjan
Date: Wed Sep 26 03:19:10 2012
New Revision: 1390266
URL: http://svn.apache.org/viewvc?rev=1390266&view=rev
Log:
Clean up some more code.
Modified:
commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/ColorSpaceSubset.java
commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/PaletteFactory.java
Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/ColorSpaceSubset.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/ColorSpaceSubset.java?rev=1390266&r1=1390265&r2=1390266&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/ColorSpaceSubset.java (original)
+++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/ColorSpaceSubset.java Wed Sep 26 03:19:10 2012
@@ -35,7 +35,6 @@ class ColorSpaceSubset {
maxs = new int[PaletteFactory.components];
for (int i = 0; i < PaletteFactory.components; i++) {
mins[i] = 0;
- // maxs[i] = 255;
maxs[i] = precision_mask;
}
@@ -53,11 +52,7 @@ class ColorSpaceSubset {
rgb = -1;
}
- public static long compares = 0;
-
public final boolean contains(int red, int green, int blue) {
- compares++;
-
red >>= (8 - precision);
if (mins[0] > red)
return false;
@@ -128,33 +123,27 @@ class ColorSpaceSubset {
}
public void setAverageRGB(int table[]) {
+ long redsum = 0, greensum = 0, bluesum = 0;
- {
- long redsum = 0, greensum = 0, bluesum = 0;
-
- for (int red = mins[0]; red <= maxs[0]; red++)
- for (int green = mins[1]; green <= maxs[1]; green++)
- for (int blue = mins[2]; blue <= maxs[2]; blue++)
- // for (int red = 0; red <= precision_mask; red++)
- // for (int green = 0; green <= precision_mask; green++)
- // for (int blue = 0; blue <= precision_mask; blue++)
- {
- int index = (blue << (2 * precision)) // note: order
- // reversed
- | (green << (1 * precision))
- | (red << (0 * precision));
- int count = table[index];
- redsum += count * (red << (8 - precision));
- greensum += count * (green << (8 - precision));
- bluesum += count * (blue << (8 - precision));
-
- }
-
- redsum /= total;
- greensum /= total;
- bluesum /= total;
- rgb = (int) (((redsum & 0xff) << 16) | ((greensum & 0xff) << 8) | ((bluesum & 0xff) << 0));
+ for (int red = mins[0]; red <= maxs[0]; red++) {
+ for (int green = mins[1]; green <= maxs[1]; green++) {
+ for (int blue = mins[2]; blue <= maxs[2]; blue++) {
+ // note: order reversed
+ int index = (blue << (2 * precision))
+ | (green << (1 * precision))
+ | (red << (0 * precision));
+ int count = table[index];
+ redsum += count * (red << (8 - precision));
+ greensum += count * (green << (8 - precision));
+ bluesum += count * (blue << (8 - precision));
+ }
+ }
}
+
+ redsum /= total;
+ greensum /= total;
+ bluesum /= total;
+ rgb = (int) (((redsum & 0xff) << 16) | ((greensum & 0xff) << 8) | ((bluesum & 0xff) << 0));
}
public int index;
Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/PaletteFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/PaletteFactory.java?rev=1390266&r1=1390265&r2=1390266&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/PaletteFactory.java (original)
+++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/palette/PaletteFactory.java Wed Sep 26 03:19:10 2012
@@ -115,7 +115,6 @@ public class PaletteFactory {
int b = (blue << (2 * precision));
for (int green = mins[1]; green <= maxs[1]; green++) {
int g = (green << (1 * precision));
-
for (int red = mins[0]; red <= maxs[0]; red++) {
int index = b | g | red;
@@ -149,8 +148,6 @@ public class PaletteFactory {
return null;
}
- // List result = new ArrayList();
-
int slice_mins[] = new int[subset.mins.length];
System.arraycopy(subset.mins, 0, slice_mins, 0, subset.mins.length);
int slice_maxs[] = new int[subset.maxs.length];
@@ -194,26 +191,23 @@ public class PaletteFactory {
int slice1, slice2;
int last = 0;
- {
- for (slice1 = subset.mins[component]; slice1 != subset.maxs[component] + 1; slice1++) {
+ for (slice1 = subset.mins[component]; slice1 != subset.maxs[component] + 1; slice1++) {
- slice_mins[component] = slice1;
- slice_maxs[component] = slice1;
+ slice_mins[component] = slice1;
+ slice_maxs[component] = slice1;
- last = getFrequencyTotal(table, slice_mins, slice_maxs,
- precision);
+ last = getFrequencyTotal(table, slice_mins, slice_maxs,
+ precision);
- sum1 += last;
-
- if (sum1 >= (total / 2))
- break;
- }
-
- sum2 = sum1 - last;
- slice2 = slice1 - 1;
+ sum1 += last;
+ if (sum1 >= (total / 2))
+ break;
}
+ sum2 = sum1 - last;
+ slice2 = slice1 - 1;
+
DivisionCandidate dc1 = finishDivision(table, subset, component,
precision, sum1, slice1);
DivisionCandidate dc2 = finishDivision(table, subset, component,
@@ -238,7 +232,6 @@ public class PaletteFactory {
dcs.addAll(divideSubset2(table, subset, 2, precision));
DivisionCandidate best_v = null;
- // int best_split
double best_score = Double.MAX_VALUE;
for (int i = 0; i < dcs.size(); i++) {
@@ -250,9 +243,7 @@ public class PaletteFactory {
int area2 = second.total;
int diff = Math.abs(area1 - area2);
- double split = ((double) diff) / ((double) Math.max(area1, area2));
-
- double score = split;
+ double score = ((double) diff) / ((double) Math.max(area1, area2));
if (best_v == null) {
best_v = dc;
@@ -317,27 +308,23 @@ public class PaletteFactory {
if (debug)
System.out.println("\t" + "area: " + max_area);
- {
-
- DivisionCandidate dc = divideSubset2(table, max_subset,
- precision);
- if (dc != null) {
- v.remove(max_subset);
- v.add(dc.dst_a);
- v.add(dc.dst_b);
- } else
- ignore.add(max_subset);
- }
+ DivisionCandidate dc = divideSubset2(table, max_subset,
+ precision);
+ if (dc != null) {
+ v.remove(max_subset);
+ v.add(dc.dst_a);
+ v.add(dc.dst_b);
+ } else
+ ignore.add(max_subset);
if (v.size() == desired_count)
return v;
}
-
- // return result;
}
/**
- * Builds an inexact palette of at most {@code max} colors in {@code src}.
+ * Builds an inexact palette of at most {@code max} colors in {@code src}
+ * using the Median Cut algorithm.
* @param src the image whose palette to build
* @param max the maximum number of colors the palette can contain
* @return the palette of at most {@code max} colors
@@ -362,7 +349,7 @@ public class PaletteFactory {
}
// step 1: count frequency of colors
- for (int y = 0; y < height; y++)
+ for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int argb = src.getRGB(x, y);
@@ -370,6 +357,7 @@ public class PaletteFactory {
table[index]++;
}
+ }
if (debug) {
int all_total = getFrequencyTotal(table, all.mins, all.maxs, precision);