используя Buffered Image для записи изображений RGB - PullRequest
0 голосов
/ 02 марта 2011

У меня есть двумерный байтовый массив I [] [], каждая запись в котором либо 0, либо -1 (т. Е. 255)

Теперь я использую следующий код для записи изображения в формате RGB,

    public void writeImage(String outputFileName){
    BufferedImage BI = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    for(int y = 0;y < height;y++){
        for(int x = 0;x < width;x++){
            int gray = (int) I[y][x] & 0xFF;
            int newRGB = (gray << 16) + (gray << 8) + gray;
            BI.setRGB(x, y, newRGB);
        }
    }
    try{
        ImageIO.write(BI, "JPG", new File(outputFileName));
    } catch(IOException e){
        System.err.println("Unable to output results");
    }
}

Изображение написано успешно.Поскольку исходный массив данных содержал только два разных значения (0 и 255), я ожидал, что записанное изображение также будет иметь два разных уровня.Однако написанное изображение имеет 92 различных уровня.Что я делаю не так?

1 Ответ

4 голосов
/ 02 марта 2011

Вы не делаете ничего плохого, но сжатие JPEG означает, что уровни в каждом пикселе записаны не совсем точно - когда изображение не сжато, артефакты сжатия JPEG слегка расширяют острые края по другим пикселям.

...