private static int[] getOutputPointsForNewerDevices(Point[] knots) { Point[] controlPoints = calculateControlPoints(knots); Path path = new Path(); path.moveTo(0, 0); path.lineTo(knots[0].x / 255.0f, knots[0].y / 255.0f); path.moveTo(knots[0].x / 255.0f, knots[0].y / 255.0f); for (int index = 1; index < knots.length; index++) { path.quadTo( controlPoints[index - 1].x / 255.0f, controlPoints[index - 1].y / 255.0f, knots[index].x / 255.0f, knots[index].y / 255.0f ); path.moveTo(knots[index].x / 255.0f, knots[index].y / 255.0f); } path.lineTo(1, 1); path.moveTo(1, 1); float[] allPoints = new float[256]; for (int x = 0; x < 256; x++) { PathInterpolator pathInterpolator = new PathInterpolator(path); allPoints[x] = 255.0f * pathInterpolator.getInterpolation((float) x / 255.0f); } allPoints[0] = knots[0].y; allPoints[255] = knots[knots.length - 1].y; return validateCurve(allPoints); }