2

我正在使用 Delphi XE 中的 WIA 2.0 库来自动扫描。我正在使用“ ShowAcquireImage ”功能来提供要保存到光盘的图像。我想将图像保存为压缩格式,例如 png 或 jpg,但该库似乎只保存在位图中。

有没有其他人看到过这个问题,是否有解决方法?(除了作为一个大的 bmp 文件保存到光盘,并重新加载到 TJpegImage/TPngImage 对象中,也就是说)。

感谢菲尔的任何建议。

这是我目前使用的代码:

 //...
 uses   ComObj, WIA_TLB,   
 //...
procedure TMainForm.ScanWiaDocument(DocumentRef: String);
const
   wiaFormatJPEG = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}';
   wiaFormatPNG  = '{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}';
var
   CommonDlg: ICommonDialog;
   AImage: IImageFile;
   ImagePath: String;
begin
   CommonDlg := CreateOleObject('WIA.CommonDialog') as ICommonDialog;
   //Transfer as JPG
   try try
      AImage := CommonDlg.ShowAcquireImage(ScannerDeviceType,
                ColorIntent,    //or UnspecifiedIntent, GrayscaleIntent, TextIntent
                MinimizeSize,   //or MaximizeQuality
                wiaFormatJPEG,  //image format  **<----Only saves in BMP format!**!
                False,          //AlwaysSelectDevice
                False,          //UseCommonUI
                True);          //CancelError
      //Save the image
      ImagePath := 'C:\temp\scanimage\'+DocumentRef+'.'+ AImage.FileExtension;
      AImage.SaveFile(ImagePath);
   except
       on E:Exception do LogException(E, 'ScanWiaDocument', True);
   end;
   finally  //release interface
      CommonDlg := nil;
      AImage    := nil;
   end;
end;

4

2 回答 2

5

如果可能,您要求ShowAcquireImage()以 JPG 格式捕获,但它不必尊重这一点。ShowAcquireImage()退出时,返回的对象ImageFile具有FormatID指定实际使用的格式的属性,例如,如果扫描仪不支持 JPG。如果文件不是 JPG 格式,则必须在之后进行转换,例如使用Wia.ImageProcess对象。MSDN 展示了一个这样做的例子

于 2011-09-26T18:50:48.463 回答
0

我注意到您用于 JPG 和 PNG 的常量都是我用于 BMP 的常量。这可能是你的问题吗?

于 2013-01-02T03:00:21.470 回答