package org.geotools.image;
import static org.junit.Assert.*;
import java.awt.Color;
import java.awt.Transparency;
import java.awt.image.IndexColorModel;
import org.geotools.resources.image.ColorUtilities;
import org.junit.Test;
public class ColorUtilitiesTest {
@Test
public void mergeSolidBackgroundSolidPalette() {
byte[] r = new byte[] {-1, 0, 0};
byte[] g = new byte[] {0, -1, 0};
byte[] b = new byte[] {0, 0, -1};
IndexColorModel icm = new IndexColorModel(2, 3, r, g, b);
IndexColorModel merged = ColorUtilities.applyBackgroundColor(icm, Color.WHITE);
assertFalse(merged.hasAlpha());
assertEquals(merged.getTransparency(), Transparency.OPAQUE);
byte[] mr = new byte[3];
byte[] mb = new byte[3];
byte[] mg = new byte[3];
merged.getReds(mr);
merged.getGreens(mg);
merged.getBlues(mb);
for (int i = 0; i < r.length; i++) {
assertEquals(r[i], mr[i]);
assertEquals(g[i], mg[i]);
assertEquals(b[i], mb[i]);
}
}
@Test
public void mergeSolidBackgroundTranslucentPalette() {
byte[] r = new byte[] {-1, 0, 0};
byte[] g = new byte[] {0, -1, 0};
byte[] b = new byte[] {0, 0, -1};
byte[] a = new byte[] {-128, -128, -128};
IndexColorModel icm = new IndexColorModel(2, 3, r, g, b, a);
IndexColorModel merged = ColorUtilities.applyBackgroundColor(icm, Color.WHITE);
assertFalse(merged.hasAlpha());
assertEquals(merged.getTransparency(), Transparency.OPAQUE);
byte[] mr = new byte[3];
byte[] mb = new byte[3];
byte[] mg = new byte[3];
merged.getReds(mr);
merged.getGreens(mg);
merged.getBlues(mb);
for (int i = 0; i < r.length; i++) {
assertEquals((r[i] & 0xFF) == 255 ? 255 : 126, mr[i] & 0xFF);
assertEquals((g[i] & 0xFF) == 255 ? 255 : 126, mg[i] & 0xFF);
assertEquals((b[i] & 0xFF) == 255 ? 255 : 126, mb[i] & 0xFF);
}
}
@Test
public void mergeTranslucentBackgroundTranslucentPalette() {
byte[] r = new byte[] {-1, 0, 0};
byte[] g = new byte[] {0, -1, 0};
byte[] b = new byte[] {0, 0, -1};
byte[] a = new byte[] {-128, -128, -128};
IndexColorModel icm = new IndexColorModel(2, 3, r, g, b, a);
IndexColorModel merged = ColorUtilities.applyBackgroundColor(icm, new Color(255, 255, 255, 128));
assertTrue(merged.hasAlpha());
assertEquals(merged.getTransparency(), Transparency.TRANSLUCENT);
byte[] mr = new byte[3];
byte[] mb = new byte[3];
byte[] mg = new byte[3];
byte[] ma = new byte[3];
merged.getReds(mr);
merged.getGreens(mg);
merged.getBlues(mb);
merged.getAlphas(ma);
for (int i = 0; i < r.length; i++) {
assertEquals((r[i] & 0xFF) == 255 ? 255 : 84, mr[i] & 0xFF);
assertEquals((g[i] & 0xFF) == 255 ? 255 : 84, mg[i] & 0xFF);
assertEquals((b[i] & 0xFF) == 255 ? 255 : 84, mb[i] & 0xFF);
assertEquals(191, ma[i] & 0xFF);
}
}
}