twainjava的简单介绍

博主:adminadmin 2023-01-17 16:30:09 289

本篇文章给大家谈谈twainjava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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的信息别忘了在本站进行查找喔。