private int getSumOfColorValues(Cube cube, Colors colorWithLongestDistance) {
   int sum = 0;
   for (Pixel p : cube.getHistogram().getHistogram()) {
     sum += p.getCount();
   }
   return sum;
 }
  private ArrayList<Cube> medianCut(Histogram histogram, int countfOfCubes) {
    ArrayList<Cube> cubeList = new ArrayList<>();

    Cube initialCube = new Cube(histogram);
    initialCube.shrink();
    cubeList.add(initialCube);

    do {
      Cube cube = this.getBiggestCube(cubeList);
      cubeList.remove(cube);
      Colors colorWithLongestDistance = cube.getLongestDistance();

      sortHistogram(cube, colorWithLongestDistance);

      int colorValueSum = this.getSumOfColorValues(cube, colorWithLongestDistance);

      Histogram histogramOfChildCube1 = new Histogram();
      Histogram histogramOfChildCube2 = new Histogram();

      int sum = 0;
      for (Pixel p : cube.getHistogram().getHistogram()) {
        sum += p.getCount();
        if (sum <= colorValueSum / 2) {
          histogramOfChildCube1.add(p);
        } else {
          histogramOfChildCube2.add(p);
        }
      }

      Cube childCube1 = new Cube(histogramOfChildCube1);
      childCube1.shrink();
      Cube childCube2 = new Cube(histogramOfChildCube2);
      childCube2.shrink();

      cubeList.add(childCube1);
      cubeList.add(childCube2);
    } while (cubeList.size() < countfOfCubes);
    return cubeList;
  }