package com.marshalchen.common.uimodule.imageprocessing.filter.processing; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import com.marshalchen.common.uimodule.imageprocessing.filter.BasicFilter; /** * Flips the image in the given orientation. * flipDirection: The direction to flip the image * @author Chris Batt */ public class FlipFilter extends BasicFilter { public static final int FLIP_VERTICAL = 0; public static final int FLIP_HORIZONTAL = 1; public static final int FLIP_BOTH = 2; public FlipFilter(int flipDirection) { textureVertices = new FloatBuffer[4]; float minX = 0f; float maxX = 1f; float minY = 0f; float maxY = 1f; switch(flipDirection) { case FLIP_VERTICAL: minX = 1f; maxX = 0f; break; case FLIP_HORIZONTAL: minY = 1f; maxY = 0f; break; case FLIP_BOTH: minX = 1f; maxX = 0f; minY = 1f; maxY = 0f; break; } float[] texData0 = new float[] { minX, minY, maxX, minY, minX, maxY, maxX, maxY, }; textureVertices[0] = ByteBuffer.allocateDirect(texData0.length * 4).order(ByteOrder. nativeOrder()).asFloatBuffer(); textureVertices[0].put(texData0).position(0); float[] texData1 = new float[] { minY, maxX, minY, minX, maxY, maxX, maxY, minX, }; textureVertices[1] = ByteBuffer.allocateDirect(texData1.length * 4).order(ByteOrder. nativeOrder()).asFloatBuffer(); textureVertices[1].put(texData1).position(0); float[] texData2 = new float[] { maxX, maxY, minX, maxY, maxX, minY, minX, minY, }; textureVertices[2] = ByteBuffer.allocateDirect(texData2.length * 4).order(ByteOrder. nativeOrder()).asFloatBuffer(); textureVertices[2].put(texData2).position(0); float[] texData3 = new float[] { maxY, minX, maxY, maxX, minY, minX, minY, maxX, }; textureVertices[3] = ByteBuffer.allocateDirect(texData3.length * 4).order(ByteOrder. nativeOrder()).asFloatBuffer(); textureVertices[3].put(texData3).position(0); for(int i = 0; i < 4; i++) { } } }