public static Picture fromPictureHiBD(PictureHiBD pic) { int lowBitsNum = pic.getBitDepth() - 8; int lowBitsRound = (1 << lowBitsNum) >> 1; Picture result = Picture.createCroppedHiBD(pic.getWidth(), pic.getHeight(), lowBitsNum, pic.getColor(), pic.getCrop()); for (int i = 0; i < Math.min(pic.getData().length, result.getData().length); i++) { for (int j = 0; j < Math.min(pic.getData()[i].length, result.getData()[i].length); j++) { int val = pic.getData()[i][j]; int round = MathUtil.clip((val + lowBitsRound) >> lowBitsNum, 0, 255); result.getData()[i][j] = (byte) (round - 128); } } byte[][] lowBits = result.getLowBits(); if (lowBits != null) { for (int i = 0; i < Math.min(pic.getData().length, result.getData().length); i++) { for (int j = 0; j < Math.min(pic.getData()[i].length, result.getData()[i].length); j++) { int val = pic.getData()[i][j]; int round = MathUtil.clip((val + lowBitsRound) >> lowBitsNum, 0, 255); lowBits[i][j] = (byte) (val - (round << 2)); } } } return result; }