Прежде чем кто-то сообщит, что этот вопрос повторяется, пожалуйста, знайте, что я действительно сделал домашнее задание, прежде чем размещать этот вопрос. Однако ни одно из решений у меня не работает.
Рассмотрим приведенный ниже фрагмент кода для изменения определенных значений пикселей в растровом изображении.
int pixels[] = new int[height * width];
bmp.getPixels(pixels, 0, width, 0, 0, width, height);
System.out.println("before last "+pixels[pixels.length-1]);
switch (random) {
case 0:
pixels[pixels.length - 1] = Color.BLACK;
break;
case 1:
pixels[pixels.length - 1] = Color.RED;
break;
case 2:
pixels[pixels.length - 1] = Color.GREEN;
break;
case 3:
pixels[pixels.length - 1] = Color.BLUE;
break;
case 4:
pixels[pixels.length - 1] = Color.YELLOW;
break;
case 5:
pixels[pixels.length - 1] = Color.MAGENTA;
break;
case 6:
pixels[pixels.length - 1] = Color.LTGRAY;
break;
case 7:
pixels[pixels.length - 1] = Color.GRAY;
break;
case 8:
pixels[pixels.length - 1] = Color.CYAN;
break;
case 9:
pixels[pixels.length - 1] = Color.WHITE;
break;
default:
pixels[pixels.length - 1] = Color.BLACK;
break;
}
После того, как я установил определенные c пикселей таким образом , Я наконец звоню bmp.setPixels(pixels,0,width,0,0,width,height);
. Как только я это сделаю, я даже сохраню изображение.
Однако, как только я прочитал это сохраненное изображение и проверил те же значения,
switch(pixels[pixels.length-1])
{
case Color.BLACK : mp=0; break;
case Color.RED : mp=1; break;
case Color.GREEN : mp=2; break;
case Color.BLUE : mp=3; break;
case Color.YELLOW : mp=4; break;
case Color.MAGENTA : mp=5; break;
case Color.LTGRAY : mp=6; break;
case Color.GRAY : mp=7; break;
case Color.CYAN : mp=8; break;
case Color.WHITE : mp=9; break;
default : mp=0; break;
}
это совершенно другое! Ошибка заключается в том, что mp
всегда равно 0.
Судя по другим inte rnet и вопросам форума, которые я задавал, этот код, по-видимому, должен работать. Где я ошибаюсь?