2016-05-27 32 views
6

Ich schreibe eine einfache Scan-Anwendung mit jfreesane und Apache PDFBox. HierBufferedImage Farbsättigung

ist der Scan-Code:

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

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

Und hier ist das Ergebnis:

enter image description here

Wie Sie das PDF-Bild sehen können ist mehr "blass" (Sättigung? - Entschuldigung, ich bin nicht gut in der Farbtheorie und weiß es nicht wie man es richtig nennt).

Was habe ich herausgefunden:

  1. Printing BufferedImage zu JLabel mit JLabel (neu ImageIcon (BiMg)) Konstruktor erzeugt das gleiche Ergebnis wie mit PDF ("blass" Farben) so denke ich PDFBox ist nicht der Grund.
  2. Ändern der Scanauflösung - kein Effekt.
  3. bimg.getTransparency() gibt 1 (OPAK)
  4. bimg.getType() liefert 0 (TYPE_CUSTOM)

PNG-Datei:

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

PDF-Datei

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

+0

so was ist die richtige? das Png oder das pdf? – gpasch

+0

@gpasch Png ist richtig. –

+0

@TilmanHausherr Aktualisierte Frage mit den Links. –

Antwort