我正在使用 Delphi XE 中的 WIA 2.0 库来自动扫描。我正在使用“ShowAcquireImage”函数来提供要保存到光盘的图像。我想将图像保存为压缩格式,例如 png 或 jpg,但该库似乎只保存为位图。
有其他人看到过这个问题吗?有解决方法吗? (除了作为大 bmp 文件保存到光盘并重新加载到 TJpegImage/TPngImage 对象之外)。
感谢您的任何建议 菲尔W。
这是我当前使用的代码:
<前>//...
使用 ComObj、WIA_TLB、
//...
过程 TMainForm.ScanWiaDocument(DocumentRef: String);
常量
wiaFormatJPEG = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}';
wiaFormatPNG = '{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}';
变量
CommonDlg:ICommonDialog;
AImage: IImageFile;
图像路径:字符串;
开始
CommonDlg := CreateOleObject('WIA.CommonDialog') as ICommonDialog;
//转为JPG
试试
AImage := CommonDlg.ShowAcquireImage(ScannerDeviceType,
ColorIntent,//或 UnspecifiedIntent, GrayscaleIntent, TextIntent
最小化尺寸,//或最大化质量
wiaFormatJPEG,//图像格式 **<----仅保存为BMP格式!**!
False,//始终选择设备
False,//使用CommonUI
真的);//取消错误
//保存图像
ImagePath := 'C:\temp\scanimage\'+DocumentRef+'.'+ AImage.FileExtension;
AImage.SaveFile(ImagePath);
除了
在 E:Exception 上执行 LogException(E, 'ScanWiaDocument', True);
结尾;
最后//释放接口(interface)
CommonDlg := nil;
AImage := nil;
结尾;
结尾;
最佳答案
您在问ShowAcquireImage()
如果可能的话,以 JPG 格式捕获,但不必遵守这一点。当ShowAcquireImage()
退出,返回ImageFile
对象有一个 FormatID
属性指定实际使用的格式,例如扫描仪不支持 JPG。如果该文件还不是 JPG 格式,则必须随后对其进行转换,例如使用 Wia.ImageProcess
目的。 MSDN显示an example of doing that .
关于delphi - WIA的ShowAcquireImage只保存为BMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557430/