import java.io.IOException;
import java.net.InetAddress;
import au.com.southsky.jfreesane.SaneDevice;
import au.com.southsky.jfreesane.SaneException;
import au.com.southsky.jfreesane.SaneSession;
public class Test {
public static void main(String[] args) throws IOException, SaneException {
if (args.length < 2) return;
double w = Double.parseDouble(args[0]);
double h = Double.parseDouble(args[1]);
SaneSession session = null;
SaneDevice device = null;
try {
InetAddress address = InetAddress.getByName("localhost");
session = SaneSession.withRemoteSane(address);
device = session.getDevice("hpaio:/usb/Deskjet_4620_series?serial=CN582736YP47TN");
device.open();
device.getOption("source").setStringValue("Flatbed"); // [Flatbed], ADF
device.getOption("mode").setStringValue("Color"); // [Lineart], Gray, Color
device.getOption("resolution").setIntegerValue(200); // 100, 200, 300, 600 (75)
device.getOption("tl-x").setFixedValue(0.0); // [0.0] - 215.90000915527344
device.getOption("tl-y").setFixedValue(0.0); // [0.0] - 297.01068115234375
device.getOption("br-x").setFixedValue(w); // 0.0 - [215.90000915527344]
device.getOption("br-y").setFixedValue(h); // 0.0 - [297.01068115234375]
device.acquireImage();
} finally {
if (device != null) try { device.close(); } catch (IOException e) { e.printStackTrace(); }
if (session != null) try { session.close(); } catch (IOException e) { e.printStackTrace(); }
}
}
}
$ java -cp .:./guava-18.0.jar Test 130.0 185.0
$ java -cp .:./guava-18.0.jar Test 105.0 149.0
Exception in thread "main" java.io.IOException: truncated read
at au.com.southsky.jfreesane.FrameInputStream.readFrame(FrameInputStream.java:46)
at au.com.southsky.jfreesane.SaneSession.acquireImage(SaneSession.java:173)
at au.com.southsky.jfreesane.SaneDevice.acquireImage(SaneDevice.java:91)
at Test.main(Test.java:34)
scanimage \
--device-name=hpaio:/usb/Deskjet_4620_series?serial=CN582736YP47TN \
--source=Flatbed \
--mode=Color \
--resolution=200 \
-l 0.0 -t 0.0 -x 105.0 -y 149.0 > image.pnm
All options specific to device `hpaio:/usb/Deskjet_4620_series?serial=CN582736YP47TN':
Scan mode:
--mode Lineart|Gray|Color [Lineart]
Selects the scan mode (e.g., lineart, monochrome, or color).
--resolution 100|200|300|600dpi [75]
Sets the resolution of the scanned image.
--source Flatbed|ADF [Flatbed]
Selects the scan source (such as a document-feeder).
Advanced:
--brightness 0..2000 [1000]
Controls the brightness of the acquired image.
--contrast 0..2000 [1000]
Controls the contrast of the acquired image.
--compression JPEG [JPEG]
Selects the scanner compression method for faster scans, possibly at
the expense of image quality.
--jpeg-quality 0..100 [inactive]
Sets the scanner JPEG compression factor. Larger numbers mean better
compression, and smaller numbers mean better image quality.
Geometry:
-l 0..215.9mm [0]
Top-left x position of scan area.
-t 0..297.011mm [0]
Top-left y position of scan area.
-x 0..215.9mm [215.9]
Width of scan-area.
-y 0..297.011mm [297.011]
Height of scan-area.
$ java -cp .:./guava-18.0.jar Test 10.0 20.447
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readFrame
FINE: Reading frame: FrameInputStream{isBigEndian=false, parameters=SaneParameters{frameType=RGB, isLastFrame=true, bytesPerLine=234, pixelsPerLine=78, lineCount=160, depthPerPixel=8}}
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 4688 bytes
Sep 28, 2014 7:04:29 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Reached end of records
$ java -cp .:./guava-18.0.jar Test 10.0 20.448
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readFrame
FINE: Reading frame: FrameInputStream{isBigEndian=false, parameters=SaneParameters{frameType=RGB, isLastFrame=true, bytesPerLine=234, pixelsPerLine=78, lineCount=161, depthPerPixel=8}}
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 4688 bytes
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Reached end of records
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readFrame
WARNING: truncated read (got 37,440, expected 37,674 bytes)
Sep 28, 2014 7:06:24 PM au.com.southsky.jfreesane.FrameInputStream readFrame
WARNING: padded image with -234 null bytes
Exception in thread "main" java.awt.image.RasterFormatException: Data array too small (should be > 37673 )
at sun.awt.image.ByteComponentRaster.verify(ByteComponentRaster.java:931)
at sun.awt.image.ByteComponentRaster.<init>(ByteComponentRaster.java:201)
at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:191)
at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:113)
at java.awt.image.Raster.createInterleavedRaster(Raster.java:648)
at au.com.southsky.jfreesane.SaneImage.toBufferedImage(SaneImage.java:114)
at au.com.southsky.jfreesane.SaneSession.acquireImage(SaneSession.java:184)
at au.com.southsky.jfreesane.SaneDevice.acquireImage(SaneDevice.java:91)
at Test.main(Test.java:45)
ABRT problem creation: 'success'
scanimage \
--source=Flatbed \
--mode=Color \
--resolution=200 \
-l 0.0 -t 0.0 -x 10.0 -y 20.448 > image20.448.pnm
$ java -cp .:./guava-18.0.jar Test 10.0 20.448
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readFrame
FINE: Reading frame: FrameInputStream{isBigEndian=false, parameters=SaneParameters{frameType=RGB, isLastFrame=true, bytesPerLine=234, pixelsPerLine=78, lineCount=161, depthPerPixel=8}}
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 4688 bytes
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Reached end of records
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readFrame
WARNING: truncated read (got 37,440, expected 37,674 bytes)
Sep 29, 2014 11:17:39 AM au.com.southsky.jfreesane.FrameInputStream readFrame
WARNING: padded image with 117 null bytes
Exception in thread "main" java.awt.image.RasterFormatException: Data array too small (should be > 37673 )
at sun.awt.image.ByteComponentRaster.verify(ByteComponentRaster.java:931)
at sun.awt.image.ByteComponentRaster.<init>(ByteComponentRaster.java:201)
at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:191)
at sun.awt.image.ByteInterleavedRaster.<init>(ByteInterleavedRaster.java:113)
at java.awt.image.Raster.createInterleavedRaster(Raster.java:648)
at au.com.southsky.jfreesane.SaneImage.toBufferedImage(SaneImage.java:114)
at au.com.southsky.jfreesane.SaneSession.acquireImage(SaneSession.java:184)
at au.com.southsky.jfreesane.SaneDevice.acquireImage(SaneDevice.java:91)
at Test.main(Test.java:50)
ABRT problem creation: 'success'
$ java -cp .:./guava-18.0.jar Test 10.0 20.448
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readFrame
FINE: Reading frame: FrameInputStream{isBigEndian=false, parameters=SaneParameters{frameType=RGB, isLastFrame=true, bytesPerLine=234, pixelsPerLine=78, lineCount=161, depthPerPixel=8}}
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 8188 bytes
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Read a record of 4688 bytes
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readRecord
FINE: Reached end of records
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readFrame
WARNING: truncated read (got 37,440, expected 37,674 bytes)
Sep 29, 2014 12:30:42 PM au.com.southsky.jfreesane.FrameInputStream readFrame
WARNING: padded image with 234 null bytes
$ scanimage --source=Flatbed --mode=Color --resolution=200 -l 0.0 -t 0.0 -x 10.0 -y 20.448 > image20.448.pnm
$ identify image20.448.pnm
identify: unable to read image data `image20.448.pnm' @ error/pnm.c/ReadPNMImage/912.
$ gm identify image20.448.pnm
gm identify: Unexpected end-of-file (image20.448.pnm).
gm identify: Request did not return an image.
$ scanimage --source=Flatbed --mode=Color --resolution=200 --format=tiff -l 0.0 -t 0.0 -x 10.0 -y 20.448 > image20.448.tif
$ identify image20.448.tif
image20.448.tif TIFF 78x161 78x161+0+0 8-bit sRGB 37.7KB 0.000u 0:00.010
identify: Bogus "StripByteCounts" field, ignoring and calculating from imagelength. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/824.
$ gm identify image20.448.tif
image20.448.tif TIFF 78x161+0+0 DirectClass 8-bit 36.8K 0.000u 0:01