twainjava的简单介绍
本篇文章给大家谈谈twainjava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中怎么调用扫描仪
- 2、如何通过jni4net,在Java应用中调用C#接口
- 3、现在我在做JAVA连接扫描仪,问下有哪些扫描仪不支持TWAIN标准 请给出列表。那这些不支持的有什么解决办法
- 4、no javatwain in java.library.path
- 5、用Java直接从扫描仪获得扫描数据,然后上载到服务器上,这样的程序需要利用那些知识点(有关Java)?
java中怎么调用扫描仪
1。先搞清楚要在哪种类型的程序中调用扫描仪
如果开发的程序是java application或者基于 swing的程序,可以算作是单机或者 c/s架构的程序,applet和java fx技术也可以这么算,因为都是直接通过java程序去操控扫描仪设备。
如果是基于浏览器的应用,即b/s架构的程序,扫描图像的工作是在客户端完成的,这种情况下Java程序其实是接收和保存扫描仪读取的图像结果,并不需要直接的控制扫描仪工作,这一点上和c/s架构的程序有本质的区别。
2。架构与技术应用
2.1 c/s架构程序的扫描仪调用
c/s架构需要通过java代码直接操控扫描仪设备,java语言本身被设计为跨o/s平台,对特定平台的硬件操控能力有限,因此需要借助外部技术实现扫描仪控制调用,可以通过jni(java原生应用程序接口) 技术去实现扫描仪调用,具体的细节实现就是jni中定义扫描仪操作方法,如scan()等方法,然后使用javah生成c语言的.h头文件,然后使用vc等编程语言去实现jni接口方法。
在windows平台和mac平台上面,操作扫描仪都可以通过twain协议
总之c/s架构的java程序调用扫描仪通过jni+twain编程既可完成。
2.2 b/s架构程序的扫描仪调用
b/s架构的扫描仪调用在前面已经提到过,java程序实现上做的事情是接收扫描结果图像数据 ,例如在struts2的 action中或者jsp/servlet等等程序中接收扫描仪图像扫描结果,真实的客户端扫描仪调用应该借助客户端技术去实现。
在Linux中的Mozilla浏览器中如何调用扫描仪扫描图像呢?这个着实是个难题,需要做Mozilla的插件才可以,但是在windows平台有ActiveX技术供程序员使用,因此浏览器是在windows平台中的话借助Activex技术即可扩展浏览器能力。
如何通过jni4net,在Java应用中调用C#接口
下载Dynamic .NET TWAIN
下载jni4net,学习里面的代码实例
在环境变量中设置好JAVA_HOME和C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
解压JavaTwain,在dll目录中运行工程,编译出JavaTwain.dll
从jni4net中拷贝bin和lib到项目中
运行generateProxies.cmd
运行run.cmd
如何通过jni4net,在Java应用中调用C#接口
示例解析
C#层
在C#工程中添加引用DynamicDotNetTWAIN.dll
如何通过jni4net,在Java应用中调用C#接口
初始化Dynamic .NET TWAIN组件
public DotNetScanner()
{
// initialize TWAIN Component
try
{
dynamicDotNetTwain = new Dynamsoft.DotNet.TWAIN.DynamicDotNetTwain();
dynamicDotNetTwain.OnPostAllTransfers += new Dynamsoft.DotNet.TWAIN.Delegate.OnPostAllTransfersHandler(this.dynamicDotNetTwain_OnPostAllTransfers);
dynamicDotNetTwain.MaxImagesInBuffer = 64;
dynamicDotNetTwain.IfAppendImage = true;
dynamicDotNetTwain.IfThrowException = true;
dynamicDotNetTwain.IfShowUI = false;
dynamicDotNetTwain.IfThrowException = true;
dynamicDotNetTwain.ScanInNewProcess = true;
}
catch
{
MessageBox.Show(dynamicDotNetTwain.ErrorString);
}
}
现在我在做JAVA连接扫描仪,问下有哪些扫描仪不支持TWAIN标准 请给出列表。那这些不支持的有什么解决办法
现在一般的扫描仪都带TWAIN或是ISIS的驱动,也有的是自身的驱动像中晶的,只要装上调用一下就行
no javatwain in java.library.path
看看是不是你的javabuildpath-libraries-JRE system library那个没有被引用,如果前面有个小黄叉那就肯定了,removed掉,确定你的JDK版本,在重新加对应的JRE system library。
用Java直接从扫描仪获得扫描数据,然后上载到服务器上,这样的程序需要利用那些知识点(有关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");
}
}
}
twainjava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、twainjava的信息别忘了在本站进行查找喔。