2016-05-27 12 views
6

Piszę proste skanowanie aplikacji przy użyciu jfreesane i Apache PDFBox.Nasycenie kolorem BufferedImage

Oto kod skanowania:

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(); 

i podejmowania 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(); 

A oto wynik:

enter image description here

Jak widać obraz PDF jest bardziej "blada" (nasycenie? - przepraszam, nie jestem dobry w teorii koloru i nie wiem jak nazwać to poprawnie).

Co znalazłem się:

  1. Druk BufferedImage do JLabel użyciu JLabel (nowa ImageIcon (bimg)) konstruktor wywołuje taki sam efekt jak w przypadku PDF ("pale" kolory) więc myślę PDFBox jest nie powód.
  2. Zmiana rozdzielczości skanowania - brak efektu.
  3. bimg.getTransparency() zwraca 1 (nieprzezroczyste)
  4. bimg.getType() zwraca 0 (TYPE_CUSTOM) plik

PNG:

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

plik PDF

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

+0

Więc jaka jest prawidłowa? png lub pdf? – gpasch

+0

@gpasch Png jest poprawny. –

+0

@TilmanHausherr Zaktualizowane pytanie z linkami. –

Odpowiedz