Насыщенность цвета BufferedImage

Я пишу простое приложение для сканирования, используя jfreesane и Apache PDFBox.

Вот код сканирования:

InetAddress address = InetAddress.getByName("192.168.0.17");
SaneSession session = SaneSession.withRemoteSane(address);
List<SaneDevice> devices = session.listDevices();
SaneDevice device = devices.get(0);
device.open();
device.getOption("resolution").setIntegerValue(300);

BufferedImage bimg = device.acquireImage();
File file = new File("test_scan.png");
ImageIO.write(bimg, "png", file);

device.close();

И создание PDF:

PDDocument document = new PDDocument();
float width = bimg.getWidth();
float height = bimg.getHeight();
PDPage page = new PDPage(new PDRectangle(width, height));
document.addPage(page);
PDImageXObject pdimg = LosslessFactory.createFromImage(document, bimg);
PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true);
stream.drawImage(pdimg, 0, 0);
stream.close();

document.save(filename);
document.close();

И вот результат:

введите здесь описание изображения

Как видите, PDF-изображение более "бледное" (насыщенность? - извините, я не силен в теории цвета и не знаю, как это правильно назвать).

Что я узнал:

  1. Печать BufferedImage в JLabel с использованием конструктора JLabel(new ImageIcon(bimg)) дает тот же результат, что и с PDF («бледные» цвета), поэтому я думаю, что PDFBox не является причиной.
  2. Изменение разрешения сканирования - безрезультатно.
  3. bimg.getTransparency() возвращает 1 (НЕПРОЗРАЧНЫЙ)
  4. bimg.getType() возвращает 0 (TYPE_CUSTOM)

PNG-файл:

http://s000.tinyupload.com/index.php?file_id=95648202713651192395

PDF-файл

http://s000.tinyupload.com/index.php?file_id=90369236997064329368


person Vladimir M.    schedule 27.05.2016    source источник
comment
так какой правильный? пнг или пдф?   -  person gpasch    schedule 27.05.2016
comment
@gpasch Png правильный.   -  person Vladimir M.    schedule 30.05.2016
comment
@TilmanHausherr Обновлен вопрос со ссылками.   -  person Vladimir M.    schedule 30.05.2016
comment
@ВладимирМ. Что возвращает getColorModel()?   -  person Abdul Fatir    schedule 30.05.2016
comment
@AbdulFatir ColorModel: #pixelBits = 24 numComponents = 3 цветовое пространство = java.awt.color.ICC_ColorSpace@19481b2 прозрачность = 1 имеет альфа = ложь isAlphaPre = ложь   -  person Vladimir M.    schedule 30.05.2016
comment
@ВладимирМ. Я не могу помочь, извините. Пожалуйста, также задайте вопрос на jfreesane. github.com/sjamesr/jfreesane/issues . По сути, ваша проблема в том, что изображение плохое, когда вы его получаете, но когда вы его сохраняете и перезагружаете, оно хорошее.   -  person Tilman Hausherr    schedule 04.06.2016


Ответы (1)


В JFreeSane была проблема с цветовыми пространствами, она была исправлена ​​в версии 0.97:

https://github.com/sjamesr/jfreesane/releases/tag/jfreesane-0.97

person Vladimir M.    schedule 22.08.2016