gpt4 book ai didi

java - uk.co.mmscomputing twain 扫描仪

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:23 24 4
gpt4 key购买 nike

我正在使用这个 mmscomputing 库作为 java applet 来扫描图像或文档。使用 swings,awt 我创建了一个扫描按钮,它通过调用 mmscomputing jar 的 scanner.acquire() 方法获取扫描仪..

然后将扫描后的图片放到jpanel中显示。

问题是,当我第一次启动我的小程序并按下我的扫描按钮时..扫描工作正常..它进入的 Twain 状态是:3,4,5,6,7,5,4,3

然后第二次,再次点击我的扫描按钮..它进入的 Twain 状态是:3,4,5,4,3

它不会进入图像传输就绪和传输状态,因此不会进入下面的 CODE IF 循环

if (type.equals(ScannerIOMetadata.ACQUIRED))

所以我第二次无法在我的 jpanel 中看到新的扫描图像...

然后第三次,点击我的扫描按钮..再次正常工作..进入所有状态。所以我的意思是,对于交替转动或再次重新启动 java applet ..它有效。会是什么问题..?

我想要,每次当我点击扫描按钮时,它应该让我在 Jpanel 中获得一个新图像..但它正在交替进行。我可以强制显式设置或更改 twain 状态以进入第 6 和第 7 状态吗?还是第二次出现一些双源初始化问题?因为每次重新启动 applet 都很好.. 或者每次单击扫描按钮时都以某种方式重新初始化 applet 对象.. 就像每次单击扫描按钮时我都在重新启动 applet...

我不明白..

示例代码如下:

import uk.co.mmscomputing.device.twain.TwainConstants;
import uk.co.mmscomputing.device.twain.TwainIOMetadata;
import uk.co.mmscomputing.device.twain.TwainSource;
import uk.co.mmscomputing.device.twain.TwainSourceManager;


public class XXCrop extends JApplet implements PlugIn, ScannerListener
{

private JToolBar jtoolbar = new JToolBar("Toolbar", JToolBar.HORIZONTAL);
ImagePanel ipanel;
Image im =null;
BufferedImage imageforCrop;
ImagePlus imp=null;
int imageWidth;
int imageHeight;
private static final long serialVersionUID = 1L;
Container content = null;
private JPanel jContentPane = null;
private JButton jButton = null;
private JButton jButton1 = null;
JCheckBox clipBox = null;
JPanel crpdpanel=null;
JPanel cpanel=null;
private Scanner scanner=null;
private TwainSource ts ;
private boolean is20;






ImagePanel imagePanel,imagePanel2 ;




public static void main(String[] args) {
new XXCrop().setVisible(true);
}

public void run(String arg0) {

new XXCrop().setVisible(false);
repaint();
}

/**
* This is the default constructor
*/
public XXCrop() {
super();
init();
try {
scanner = Scanner.getDevice();

if(scanner!=null)
{
scanner.addListener(this);
}

} catch (Exception e)
{
e.printStackTrace();
}


}

/**
* This method initializes this
*
* @return void
*/
public void init()
{
this.setSize(1200, 600);
this.setLayout(null);
//this.revalidate();
this.setContentPane(getJContentPane());
}



private JToolBar getJToolBar()
{
jtoolbar.add(getJButton1());
jtoolbar.add(getJButton());


jtoolbar.setName("My Toolbar");
jtoolbar.addSeparator();
Rectangle r=new Rectangle(0, 0,1024, 30 );
jtoolbar.setBounds(r);
return jtoolbar;
}

private JPanel getJContentPane()
{
if (jContentPane == null)
{
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJToolBar());
}
return jContentPane;
}


private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(4, 16, 131, 42));
jButton.setText("Select Device");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (scanner.isBusy() == false) {
selectDevice();
}

}
});
}
return jButton;
}


/* Select the twain source! */
public void selectDevice() {

try {
scanner.select();
} catch (ScannerIOException e1) {
IJ.error(e1.toString());
}

}

private JButton getJButton1()
{
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(35,0, 30, 30));
jButton1.setText("Scan");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{//jContentPane.remove(crpdpanel);
//jContentPane.removeAll();
//jContentPane.repaint();
//jContentPane.revalidate();

getScan();
}
});
}
return jButton1;
}

public void getScan()
{

try
{


//scanner = Scanner.getDevice();
//scanner.addListener(this);
scanner.acquire();
}
catch (ScannerIOException e1)
{
IJ.showMessage("Access denied! \nTwain dialog maybe already opened!");
e1.printStackTrace();
}
}


public Image getImage()
{
Image image = imp.getImage();
return image;
}


/*Image cimg;

public Image getCimg()
{
return cimg;
}*/

public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata) {



if (type.equals(ScannerIOMetadata.ACQUIRED))
{

//imagePanel.revalidate();
//imagePanel.repaint();
//imagePanel.invalidate();

//jContentPane.remove(ipanel);
//ipanel.repaint();


if(imp!=null)
{
jContentPane.remove(ipanel);
jContentPane.remove(cpanel);
jContentPane.remove(crpdpanel);
}


imp = new ImagePlus("Scan", metadata.getImage());
//imp.show();
im = imp.getImage();


//imagePanel = new ImagePanel(im,imageWidth,imageHeight);
imagePanel = new ImagePanel(im);
imagePanel.updateUI();

imagePanel.repaint();
imagePanel.revalidate();

ClipMover mover = new ClipMover(imagePanel);
imagePanel.addMouseListener(mover);
imagePanel.addMouseMotionListener(mover);

ipanel = imagePanel.getPanel();

ipanel.setBorder(new LineBorder(Color.blue,1));
ipanel.setBorder(BorderFactory.createTitledBorder("Scanned Image"));
ipanel.setBounds(0, 30,600, 600);
ipanel.repaint();
ipanel.revalidate();
ipanel.updateUI();
jContentPane.add(ipanel);
jContentPane.getRootPane().revalidate();
jContentPane.updateUI();
//jContentPane.repaint();

// cimg=imagePanel.getCimg();

// ImagePanel cpanel = (ImagePanel) imagePanel.getUIPanel();
/*
cpanel.setBounds(700, 30,600, 800);
jContentPane.add(imagePanel.getUIPanel());
*/
cpanel = imagePanel.getUIPanel();
cpanel.setBounds(700, 30,300, 150);
cpanel.repaint();
cpanel.setBorder(new LineBorder(Color.blue,1));
cpanel.setBorder(BorderFactory.createTitledBorder("Cropping Image"));
jContentPane.add(cpanel);


jContentPane.repaint();
jContentPane.revalidate();




metadata.setImage(null);
try {
new uk.co.mmscomputing.concurrent.Semaphore(0, true).tryAcquire(2000, null);
} catch (InterruptedException e) {
IJ.error(e.getMessage());

}

}




else if (type.equals(ScannerIOMetadata.NEGOTIATE)) {
ScannerDevice device = metadata.getDevice();
try {
device.setResolution(100);
} catch (ScannerIOException e) {
IJ.error(e.getMessage());
}

try{
device.setShowUserInterface(false);
// device.setShowProgressBar(true);
// device.setRegionOfInterest(0,0,210.0,300.0);
device.setResolution(100); }catch(Exception e){
e.printStackTrace(); }

}


else if (type.equals(ScannerIOMetadata.STATECHANGE)) {
System.out.println("Scanner State "+metadata.getStateStr());
System.out.println("Scanner State "+metadata.getState());
//switch (metadata.ACQUIRED){};
ts = ((TwainIOMetadata)metadata).getSource();
//ts.setCancel(false);
//ts.getState()
//TwainConstants.STATE_TRANSFERREADY
((TwainIOMetadata)metadata).setState(6);
if ((metadata.getLastState() == 3) && (metadata.getState() == 4)){}
// IJ.error(metadata.getStateStr());
}

else if (type.equals(ScannerIOMetadata.EXCEPTION)) {
IJ.error(metadata.getException().toString());
}


}


public void stop(){ // execute before System.exit
if(scanner!=null){ // make sure user waits for scanner to finish!
scanner.waitToExit();

ts.setCancel(true);

try {
scanner.setCancel(true);
} catch (ScannerIOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

最佳答案

我不是专家,但是当 ScannerIOMetadata.STATECHANGE 时,您不应该检查扫描是否完成吗?

如果是,您应该再次初始化扫描仪。

类似的东西:

if (metadata.isFinished())
{
twainScanner = (TwainScanner) Scanner.getDevice();
}

关于java - uk.co.mmscomputing twain 扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com