服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

在java中操作扫描仪(使用jni)


  这是一个用java来操作扫描仪的小例子:
package edu.ctgu.jtwacker;

import java.awt.borderlayout;
import java.awt.cursor;
import java.awt.dimension;
import java.awt.graphics;
import java.awt.rectangle;
import java.awt.toolkit;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.awt.event.windowadapter;
import java.awt.event.windowevent;
import java.awt.event.windowlistener;
import java.awt.image.bufferedimage;
import java.io.file;
import java.io.fileinputstream;

import javax.swing.jbutton;
import javax.swing.jcombobox;
import javax.swing.jframe;
import javax.swing.jpanel;
import javax.swing.jscrollpane;
import javax.swing.jtoolbar;
import javax.swing.swingutilities;

import com.sun.image.codec.jpeg.jpegcodec;
import com.sun.image.codec.jpeg.jpegimagedecoder;

import edu.ctgu.twain.jtwain;
/*
这是显示扫描图片的frame
*/
public class jtwacker extends jframe {

class jpegpanel extends jpanel {

/** image for the inner class
*/
protected bufferedimage mjpegpanelbufferedimage;

/** pnale to diaply the image
*/
public jpegpanel() {
// no op
}

/** sets the bufferedimage into the class
* @param bi bufferedimage
*/
public void setbufferedimage(bufferedimage bi) {
if (bi == null) {
return;
}
mjpegpanelbufferedimage = bi;
dimension d = new dimension(mjpegpanelbufferedimage.getwidth(this),
mjpegpanelbufferedimage.getheight(this));
setpreferredsize(d);
revalidate();
repaint();
}

/** paints the component.
* @param g graphics object used for the painting
*/
public void paintcomponent(graphics g) {
super.paintcomponent(g);
dimension d = getsize();
g.setcolor(getbackground());
g.fillrect(0, 0, d.width, d.height);
if (mjpegpanelbufferedimage != null) {
g.drawimage(mjpegpanelbufferedimage, 0, 0, this);
}
}
}


protected jpegpanel mjpegpanel;


protected bufferedimage mbufferedimage;

protected jcombobox msourcescombo;

protected jtoolbar mtoolbar;

/** constructor
*/
public jtwacker() {
super("测试");

mjpegpanel = new jpegpanel();
jscrollpane ps = new jscrollpane(mjpegpanel,
jscrollpane.vertical_scrollbar_always,
jscrollpane.horizontal_scrollbar_always);
getcontentpane().add(ps, borderlayout.center);

windowlistener wndcloser = new windowadapter() {
public void windowclosing(windowevent e) {
system.exit(0);
}
};
addwindowlistener(wndcloser);

mtoolbar = new jtoolbar("twain");
mtoolbar.setfloatable(false);
addbuttons();
getcontentpane().add(mtoolbar, borderlayout.north);
setsize(800, 600);

/* center the frame */
dimension screendim = toolkit.getdefaulttoolkit().getscreensize();
rectangle framedim = getbounds();
setlocation(
(screendim.width - framedim.width) / 2,
(screendim.height - framedim.height) / 2
);
setvisible(true);
}

protected void addbuttons(){

jbutton _ab = new jbutton("扫描");
_ab.addactionlistener(new actionlistener() {
public void actionperformed(actionevent e) {
acquireimage();
}
});
mtoolbar.add(_ab);
mtoolbar.addseparator();

if (edu.ctgu.twain.jtwain.getinstance().istwainavailble()) {
string[] twainsources = jtwain.getinstance().getavailablesources();
if (twainsources != null) {
msourcescombo = new jcombobox(twainsources);
} else {
msourcescombo = new jcombobox();
msourcescombo.additem("<none available>");
}
} else {
msourcescombo = new jcombobox();
msourcescombo.additem("<none available>");
}
mtoolbar.add(msourcescombo);
}



protected void acquireimage() {
if (jtwain.getinstance().istwainavailble()){
if (msourcescombo.getitemcount() > 0 ){
string _source = (string)msourcescombo.getselecteditem();
if (_source != null){
string _filename = jtwain.getinstance().acquire(_source);
system.out.println(_filename);

if (_filename != null && _filename.length() > 0) {
file fchoosen = new file(_filename);
// savetofile(fchoosen);
showimage(fchoosen);
} else {
system.out.println("哎呀,怎么出错了!");
}
} // end if
} // end if
} // end if
}



protected void showimage(final file file) {
if (file == null || !file.exists()) {
return;
}
setcursor(cursor.getpredefinedcursor(cursor.wait_cursor));

thread runner = new thread() {
public void run() {
try {
fileinputstream in = new fileinputstream(file);
jpegimagedecoder decoder = jpegcodec.createjpegdecoder(in);
mbufferedimage = decoder.decodeasbufferedimage();
in.close();
swingutilities.invokelater( new runnable() {
public void run() {
reset();
}
});
}
catch (exception ex) {
ex.printstacktrace();
}
setcursor(cursor.getpredefinedcursor( cursor.default_cursor));
}
};
runner.start();
}

//把扫描得到的图片保存为文件,然后上传到服务器或保存到数据库中
protected void savetofile(final file file) {
try {
file mfile=new file("c://dd.jpg");
if (mfile.exists()) {
mfile.delete();
}else {
file.renameto(mfile);
}

} catch (exception e) {
e.printstacktrace();
// todo: handle exception
}
}

protected void reset() {
if (mbufferedimage != null) {
mjpegpanel.setbufferedimage(mbufferedimage);

}
}


public static void main(string argv[]) {
new jtwacker();
}

}

-------------------------


package edu.ctgu.twain;

/*
这是调用动态链接库的类
*/
public class jtwain {


private static final jtwain minstance = new jtwain();
protected final string dll_name = "jtwain";

private jtwain() {
initlib();
}

public static jtwain getinstance(){
return minstance;
}

public native boolean istwainavailble();

public native string[] getavailablesources();

public native string acquire();

public native string acquire(string sourcename);

private void initlib(){

try {


system.loadlibrary(dll_name);
}catch(exception e) {
e.printstacktrace();
}

finally {
// system.out.println("loading : " + dll_name + ".dll");
}
}
}

实现jtwain.dll的文件

扫描关注微信公众号