package org.jcodec.scale;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.graphics.Bitmap;
import org.jcodec.common.model.ColorSpace;
import org.jcodec.common.model.Picture8Bit;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.nio.IntBuffer;
public class BitmapUtilTest {
public static final Class<? extends int[]> CLASS_INT_ARRAY = new int[0].getClass();
@Test
public void testToBitmap8Bit() {
Picture8Bit src = Picture8Bit.create(16, 16, ColorSpace.RGB);
for (int i = 0; i < 256; i++) {
src.getPlaneData(0)[i
* 3] = src.getPlaneData(0)[i * 3 + 1] = src.getPlaneData(0)[i * 3 + 2] = (byte) (i - 128);
}
int[] pix = new int[256];
for (int i = 0; i < 256; i++)
pix[i] = (255 << 24) | (i << 16) | (i << 8) | i;
Bitmap dst = mock(Bitmap.class);
BitmapUtil.toBitmap8Bit(src, dst);
verify(dst).copyPixelsFromBuffer(eq(IntBuffer.wrap(pix)));
}
@Test
public void testFromBitmap8Bit() {
Bitmap src = mock(Bitmap.class);
when(src.getWidth()).thenReturn(16);
when(src.getHeight()).thenReturn(16);
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
int[] pix = invocation.getArgumentAt(0, CLASS_INT_ARRAY);
for (int i = 0; i < 256; i++)
pix[i] = (255 << 24) | (i << 16) | (i << 8) | i;
return null;
}
}).when(src).getPixels(any(CLASS_INT_ARRAY), eq(0), eq(16), eq(0), eq(0), eq(16), eq(16));
Picture8Bit dst = Picture8Bit.create(16, 16, ColorSpace.RGB);
BitmapUtil.fromBitmap8Bit(src, dst);
for (int i = 0; i < 256; i++) {
Assert.assertEquals(dst.getPlaneData(0)[i * 3], i - 128);
Assert.assertEquals(dst.getPlaneData(0)[i * 3 + 1], i - 128);
Assert.assertEquals(dst.getPlaneData(0)[i * 3 + 2], i - 128);
}
}
}