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 に答える