ImageIO.write меняет цвета

Я использую Java для сохранения и чтения изображений, и мне нужно, чтобы каждый пиксель был именно того цвета, в котором он был сохранен, но всякий раз, когда я использую ImageIO.write, некоторые пиксели немного отключаются. Например, один пиксель может измениться с rgb(145, 182, 110) на rgb(141, 184, 114). Я пытался записать изображение в JPEG, PNG и BMP, но пиксели всегда немного меняются. Есть ли способ сделать так, чтобы этого не произошло?

Изменить: вот код, в котором я сохраняю изображение. У меня есть пиксели, которые я хочу сохранить в 2D-массиве пикселей, который называется pix.

BufferedImage b=new BufferedImage(pix.length, pix[0].length, BufferedImage.TYPE_3BYTE_BGR);
String name = JOptionPane
                            .showInputDialog("What do you want to call the file?");

for(int r=0;r<pix.length;r++){
    for(int c=0;c<pix[r].length;c++){
        b.setRGB(c, r, new Color(pix[r][c].getRed(),pix[r][c].getGreen(),pix[r][c].getBlue()).getRGB());
    }
}
File f1 = new File(f.getAbsolutePath() + "/" + name + ".bmp");
try {
        f1.createNewFile();
        ImageIO.write(b, "bmp", f1);
} catch (IOException e1) {
        e1.printStackTrace();
}

person Yoni Subin    schedule 22.05.2016    source источник
comment
Вы должны опубликовать свой код, чтобы мы могли видеть, о чем именно вы говорите, и, надеюсь, помочь вам найти ответ.   -  person XaolingBao    schedule 23.05.2016
comment
Вы пропускаете часть, где вы читаете изображение. Как я уже сказал, создайте минимально воспроизводимый пример. Этот код должен прочитать изображение, а затем записать его. И прежде чем опубликовать это, проверьте, есть ли у него та же проблема, о которой вы упомянули.   -  person Tom    schedule 23.05.2016
comment
конечно, вы должны выбрать странный тип 3BYTE_BGR - почему? ты какой-то хакер??   -  person gpasch    schedule 23.05.2016
comment
Я пробовал другие, и все они дали мне ту же проблему. Это был последний, который я пробовал. Я могу изменить это, если это решит какую-то проблему.   -  person Yoni Subin    schedule 23.05.2016
comment
Вы уверены, что это сохранение, которое меняет пиксели? Пробовали ли вы проверить pix перед сохранением, чтобы узнать, содержит ли он 145,182,110 или 141,184,114?   -  person user253751    schedule 23.05.2016
comment
Он не меняет значение в массиве, он меняет цвет изображения после сохранения. Значение в массиве одинаково до и после.   -  person Yoni Subin    schedule 23.05.2016
comment
что такое пиксель какой-то класс? можешь выложить всю программу сверху вниз?   -  person gpasch    schedule 23.05.2016
comment
@gpasch Как вы думаете, что странного в TYPE_3BYTE_BGR? В этом нет ничего плохого, на самом деле это очень распространено...   -  person Harald K    schedule 23.05.2016