package org.hipi.test; import static org.junit.Assert.*; import static org.junit.Assume.*; import org.hipi.image.PixelArray; import org.hipi.image.PixelArrayFloat; import org.hipi.image.PixelArrayByte; import org.junit.Test; import org.junit.Ignore; public class PixelArrayTestCase { @Ignore @Test public void testPrintSRGBLUT() { // gamma compressed 8-bit sRGB => linear floating point RGB System.out.print("private static final float[] gammaExpand = {"); for (int i=0; i<256; i++) { double nonlinear = ((double)i)/255.0; double linear = (float)( ( nonlinear <= 0.04045 ) ? ( nonlinear / 12.92 ) : ( Math.pow( (nonlinear+0.055)/1.055, 2.4 ) ) ); System.out.print(linear); System.out.print("f"); if (i<(256-1)) { System.out.print(","); } } System.out.print("};"); // linear floating-point RGB => gamma compressed 8-bit sRGB int n = 2048; System.out.print("private static final byte[] gammaCompress = {"); for (int i=0; i<n; i++) { double linear = ((double)i+0.5)/(double)(n-1); double nonlinear = ( ( linear <= 0.0031308 ) ? ( 12.92 * linear ) : ( 1.055 * Math.pow( linear, 1.0/2.4 ) - 0.055 ) ); int srgb = (int)(Math.max(0,Math.min(255,(int)(nonlinear*255.0)))); System.out.print(srgb); if (i<(n-1)) { System.out.print(","); } } System.out.print("};"); } @Test public void testAllocations() { { PixelArrayByte pa = new PixelArrayByte(1); assertEquals(PixelArray.TYPE_BYTE, pa.getDataType()); assertEquals(1,PixelArray.getDataTypeSize(pa.getDataType())); assertEquals(1,pa.getSize()); assertNotNull(pa.getData()); assertEquals(0,pa.getElem(0)); pa.setSize(10); assertEquals(10,pa.getSize()); assertNotNull(pa.getData()); pa.setSize(0); assertEquals(0,pa.getSize()); assertNull(pa.getData()); } { PixelArrayFloat pa = new PixelArrayFloat(1); assertEquals(PixelArray.TYPE_FLOAT, pa.getDataType()); assertEquals(4,PixelArray.getDataTypeSize(pa.getDataType())); assertEquals(1,pa.getSize()); assertNotNull(pa.getData()); pa.setSize(10); assertEquals(10,pa.getSize()); assertNotNull(pa.getData()); pa.setSize(0); assertEquals(0,pa.getSize()); assertNull(pa.getData()); } } @Test(expected=IllegalArgumentException.class) public void testInvalidSizePixelArrayByte() { PixelArrayByte pa = new PixelArrayByte(100); assertEquals(100, pa.getSize()); pa.setSize(-1); } @Test(expected=IllegalArgumentException.class) public void testInvalidSizePixelArrayFloat() { PixelArrayFloat pa = new PixelArrayFloat(100); assertEquals(100, pa.getSize()); pa.setSize(-1); } @Test(expected=ArrayIndexOutOfBoundsException.class) public void testOutOfBounds() { PixelArrayFloat pa = new PixelArrayFloat(100); pa.setElem(100,127); } @Test public void testByteConversions() { PixelArrayByte pa = new PixelArrayByte(10); // set pa.setElem(6, 200); assertEquals("200 => 200.0f/255.0f", 200.0f/255.0f, pa.getElemFloat(6), 1e-5); assertEquals("200 => 200.0/255.0", 200.0/255.0, pa.getElemDouble(6), 1e-5); // setFloat pa.setElemFloat(2, 0.5f); assertEquals(127, pa.getElem(2)); assertEquals(0.5f, pa.getElemFloat(2), 1e-1); assertEquals(0.5, pa.getElemDouble(2), 1e-1); pa.setElemFloat(1, 0.2f); assertEquals(51, pa.getElem(1)); assertEquals(0.2f, pa.getElemFloat(1), 1e-5); assertEquals(0.2, pa.getElemDouble(1), 1e-5); // setDouble pa.setElemDouble(4, 0.5f); assertEquals(127, pa.getElem(4)); assertEquals(0.5f, pa.getElemFloat(4), 1e-1); assertEquals(0.5, pa.getElemDouble(4), 1e-1); pa.setElemDouble(3, 0.2f); assertEquals(51, pa.getElem(3)); assertEquals(0.2f, pa.getElemFloat(3), 1e-5); assertEquals(0.2, pa.getElemDouble(3), 1e-5); } @Test public void testFloatConversions() { PixelArrayFloat pa = new PixelArrayFloat(10); // set pa.setElem(6, 200); assertEquals("200 => 200.0f/255.0f", 200.0f/255.0f, pa.getElemFloat(6), 1e-5); assertEquals("200 => 200.0/255.0", 200.0/255.0, pa.getElemDouble(6), 1e-5); // setFloat pa.setElemFloat(2, 0.5f); assertEquals(127, pa.getElem(2)); assertEquals(0.5f, pa.getElemFloat(2), 1e-1); assertEquals(0.5, pa.getElemDouble(2), 1e-1); pa.setElemFloat(1, 0.2f); assertEquals(51, pa.getElem(1)); assertEquals(0.2f, pa.getElemFloat(1), 1e-5); assertEquals(0.2, pa.getElemDouble(1), 1e-5); // setDouble pa.setElemDouble(4, 0.5); assertEquals(127, pa.getElem(4)); assertEquals(0.5f, pa.getElemFloat(4), 1e-1); assertEquals(0.5, pa.getElemDouble(4), 1e-1); pa.setElemDouble(3, 0.2); assertEquals(51, pa.getElem(3)); assertEquals(0.2f, pa.getElemFloat(3), 1e-5); assertEquals(0.2, pa.getElemDouble(3), 1e-5); } @Test public void testClamp() { { PixelArrayByte pa = new PixelArrayByte(10); pa.setElem(9, 200); assertEquals("200 => 200", 200, pa.getElem(9)); pa.setElem(9, 255); assertEquals("255 => 255", 255, pa.getElem(9)); pa.setElem(9, -1); assertEquals("-1 => 0", 0, pa.getElem(9)); pa.setElem(9, -10); assertEquals("-10 => 0", 0, pa.getElem(9)); pa.setElem(9, 0); assertEquals("0 => 0", 0, pa.getElem(9)); pa.setElem(9, 100); assertEquals("100 => 100", 100, pa.getElem(9)); pa.setElem(9, 256); assertEquals("256 => 255", 255, pa.getElem(9)); pa.setElem(9, 348394); assertEquals("348394 => 255", 255, pa.getElem(9)); pa.setElemFloat(0, -1.0f); assertEquals("-1.0f => 0", 0, pa.getElem(0)); pa.setElemFloat(0, 0.f); assertEquals("0.f => 0", 0, pa.getElem(0)); pa.setElemDouble(0, 1.0); assertEquals("1.0 => 255", 255, pa.getElem(0)); pa.setElemDouble(0, 1.2); assertEquals("1.2 => 255", 255, pa.getElem(0)); pa.setElemDouble(0, 298.0); assertEquals("298.0 => 255", 255, pa.getElem(0)); } } }