Android bitmap изменяет значения пикселей редактируемой фотографии при сохранении. Зачем? - PullRequest
0 голосов
/ 30 мая 2020

Прежде чем кто-то сообщит, что этот вопрос повторяется, пожалуйста, знайте, что я действительно сделал домашнее задание, прежде чем размещать этот вопрос. Однако ни одно из решений у меня не работает.

Рассмотрим приведенный ниже фрагмент кода для изменения определенных значений пикселей в растровом изображении.

        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 и вопросам форума, которые я задавал, этот код, по-видимому, должен работать. Где я ошибаюсь?

...