在Java中操作扫描仪(使用JNI)(二)

2014-11-23 22:05:09 · 作者: · 浏览: 1

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的文件