bonjour,
je travail sur une application qui devra se connecté à un scanner.pour çela j'ai charger la dll du scanner a mon code pour pouvoir accéder a ces methodes.j'ai un soucis au niveau de la récupération des images scannées de la mémoire.voila mon code
déclaration partie c++:
partie java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 extern int APIENTRY LSGetDocDataEx(short hConnect, HWND hWnd, int ImageFormat, unsigned long *NrDoc, LPSTR FilenameFront, LPSTR FilenameRear, LPSTR FilenameFront2, LPSTR FilenameRear2, HANDLE *FrontImage, int *SizeFront, HANDLE *RearImage, int *SizeRear, HANDLE *FrontImage2, int *SizeFront2, HANDLE *RearImage2, int *SizeRear2, LPSTR CodelineSW, LPSTR CodelineHW, LPSTR Barcode, long *NrPrinted, long Reserved5, // not used must be 0 LPVOID Reserved6); // not used must be NULL
déclaration
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 int LSGetDocDataEx(short hConnect, int hWnd, int ImageFormat, NativeLong NrDoc, Pointer FilenameFront, Pointer FilenameRear, Pointer FilenameFront2, Pointer FilenameRear2, HANDLEByReference FrontImage, IntByReference SizeFront, HANDLEByReference RearImage, IntByReference SizeRear, HANDLEByReference FrontImage2, IntByReference SizeFront2, HANDLEByReference RearImage2, IntByReference SizeRear2, byte[] CodelineSW, byte[] CodelineHW, byte[] Barcode, LongByReference NrPrinted, long Reserved5, // not used must be 0 Pointer Reserved6); // not used must be NULLla variable FrontImage représente
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 reply=LsApi.instance.LSGetDocDataEx(hconnect.getValue(),0,0, NrDoc.getPointer().getNativeLong(0), FilenameFront, FilenameBack, FilenameFront2, FilenameBack2, FrontImage, SizeFront, RearImage, SizeRear, FrontImage2, SizeFront2, null, izeRear2, CodelineSW, CodelineHW, Barcode, NrPrinted, 0, null); m.CheckReply(reply, "LSGetDocDataEX"); long address = FrontImage.getPointer().getNativeLong(0).longValue(); Pointer pp = new Pointer(address); byte data[]=pp.getByteArray(0,(int)(SizeFront.getValue()/10)); try { BufferedImage img = ImageIO.read(new ByteArrayInputStream(data)); System.out.println(img.getWidth() + ",," + img.getHeight()); ImageIO.write(img,"BMP", new File("D:/image3.BMP")); System.out.println("image créer"); } catch (IOException e) { e.printStackTrace(); }ointer to a handle where will be returned the handle of memory buffer containing the front side image of the requested document, in DIB format.
SizeFront=la longeur de l'image en millimétres.
ce code me retourn une exception de type : Exception in thread "main" java.lang.NullPointerException
at NativeImplementation.Main.main(Main.java:546)
y'a t-il une solution de savoir la longeur du byte[] du pixel apartir de la longeur de l'image???
sinon une autre maniére pour récupérer l'image sans passé vers le byte[]!!!
merci d'avance
Partager