Что ты с индексами намудрил? Зачем ты их в произвольном порядке расставил? Вот мой вариант:
int w = 176;
int h = 220;
int rgb[] = new int[w * h];
byte[][][] im = new byte[3][w][h];
int i = 0;
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++, i++) {
im[0][x][y] = (byte) (rgb[i] >> 16 & 0xff);
im[1][x][y] = (byte) (rgb[i] >> 8 & 0xff);
im[2][x][y] = (byte) (rgb[i] & 0xff);
}
}