gpt4 book ai didi

Delphi Twain 问题帮助

转载 作者:行者123 更新时间:2023-12-02 13:37:18 24 4
gpt4 key购买 nike

使用 http://delphitwain.sourceforge.net/ 中的 DelphiTwain 文件并且出现一些奇怪的行为。

  1. 每次扫描后都会保留更多的内存。
  2. 经过一个小时左右的重复扫描后,扫描的图像会放大大约 10 倍,并且仅存储左上角的平方英寸。

有人遇到过类似的问题,或者有什么建议吗?

下面的代码...

try
try
Twain := TDelphiTwain.Create(self);

Twain.OnTwainAcquire := TwainAcquireHandler; //manually set the event handler
Twain.OnSourceFileTransfer := TwainSourceFileTransfer;
Twain.OnSourceSetupFileXfer := TwainSourceSetupFileXfer;

Twain.LoadLibrary;
Twain.LoadSourceManager;
Twain.Source[0].Loaded := TRUE;
Twain.Source[0].TransferMode := ttmFile;
Twain.Source[0].EnableSource(false, false);
except on e : exception do
showmessage('Error loading Scanner.');
end;

try
while Twain.Source[0].Enabled do
Application.ProcessMessages;
except on e : exception do
showmessage('Error Scanning Packing List.');
end;
finally
Twain.Source[0].Loaded := FALSE;
Twain.UnloadSourceManager(true);
Twain.UnloadLibrary;
Twain.Destroy;
end;

最佳答案

由于 TDelphiTwain 似乎是您在代码中创建的组件,因此我建议为构造函数传递 nil 并调用 .Free 方法或(如 Joseph 建议的)FreeAndNil。

Twain := TDelphiTwain.Create(nil);
try
try
Twain.OnTwainAcquire := TwainAcquireHandler; //manually set the event handler
Twain.OnSourceFileTransfer := TwainSourceFileTransfer;
Twain.OnSourceSetupFileXfer := TwainSourceSetupFileXfer;

Twain.LoadLibrary();
Twain.LoadSourceManager();
Twain.Source[0].Loaded := True;
Twain.Source[0].TransferMode := ttmFile;
Twain.Source[0].EnableSource(False, False);
except on e : exception do
showmessage('Error loading Scanner.');
end;

try
while Twain.Source[0].Enabled do
Application.ProcessMessages;
except on e : exception do
showmessage('Error Scanning Packing List.');
end;
Twain.Source[0].Loaded := False;
Twain.UnloadSourceManager(True);
Twain.UnloadLibrary();
finally
FreeAndNil(Twain);
end;

我还建议更好的异常处理,但与您提出的问题无关。用户会看到并向您报告的唯一内容(或者更糟糕的是,角落里负责 IT 支持的安静的人喜欢从用户那里得到非描述性错误)是“执行某事时出错”

祝你好运

另一个需要注意的方面是扫描仪是否支持 WIA(Windows 图像采集)

var
DevMgr: IDeviceManager;
Scanner: Idevice;
Picture: IItem;
Image: OleVariant;
AImage: IImageFile;
begin
DevMgr := CreateOleObject('WIA.DeviceManager') as IDeviceManager;

// Figure out which device is the scanner
Scanner:= DevMgr.DeviceInfos.Item[1].Connect;

//Command: Figure out which command scans..
Picture := Scanner.ExecuteCommand(Scanner.Commands.Item[1].CommandID);

//Transfer as JPG
Image := Picture.Transfer(Picture.Formats.Item[1]);

//Save the image
AImage := IImageFile(Image);
AImage.SaveFile('c:\wia_viaScanner\image.' + AImage.FileExtension);
end;

有关 WIA 库的更多信息可以在此处找到。 http://msdn.microsoft.com/en-us/library/ms629859(VS.85).aspx

关于Delphi Twain 问题帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721948/

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