private void transposePicture() { final Picture transposedPicture = new Picture(picture.height(), picture.width()); final int width = transposedPicture.width(); final int height = transposedPicture.height(); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { transposedPicture.set(i, j, picture.get(j, i)); } } picture = transposedPicture; }
// energy of pixel at column x and row y public double energy(final int x, final int y) { checkBounds(x, y); if (onTheEdge(x, y)) { return EDGE_ENERGY; } final Color leftPixel = picture.get(x - 1, y); final Color rightPixel = picture.get(x + 1, y); final double RX = leftPixel.getRed() - rightPixel.getRed(); final double GX = leftPixel.getGreen() - rightPixel.getGreen(); final double BX = leftPixel.getBlue() - rightPixel.getBlue(); final Color topPixel = picture.get(x, y - 1); final Color bottomPixel = picture.get(x, y + 1); final double RY = topPixel.getRed() - bottomPixel.getRed(); final double GY = topPixel.getGreen() - bottomPixel.getGreen(); final double BY = topPixel.getBlue() - bottomPixel.getBlue(); final double deltaXSquared = (RX * RX) + (GX * GX) + (BX * BX); final double deltaYSquared = (RY * RY) + (GY * GY) + (BY * BY); return Math.sqrt(deltaXSquared + deltaYSquared); }
// remove vertical seam from current picture public void removeVerticalSeam(final int[] seam) { checkSeam(seam, height(), width()); final int width = width() - 1; final int height = height(); final Picture newPicture = new Picture(width, height); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int index; if (i < seam[j]) { index = i; } else { index = i + 1; } final Color color = picture.get(index, j); newPicture.set(i, j, color); } } picture = newPicture; }