ShowAcquireImage WIA только сохраняет в BMP?

Я использую библиотеку WIA 2.0 в Delphi XE для автоматизации сканирования. Я использую функцию " ShowAcquireImage ", чтобы предоставить изображение для сохранения на диск. Я хочу сохранить изображение в сжатом формате, таком как png или jpg, но библиотека, кажется, сохраняет только растровое изображение.

Кто-нибудь еще видел эту проблему, и есть ли обходной путь? (Помимо сохранения на диск в виде большого файла BMP и повторной загрузки в объект TJpegImage/TPngImage, то есть).

Спасибо за любой совет PhilW.

Этот код я сейчас использую:

 //...
 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;

2 ответа

Решение

Вы спрашиваете ShowAcquireImage() захватить в JPG, если это возможно, но это не должно соблюдать это. когда ShowAcquireImage() выходы, возвращенные ImageFile объект имеет FormatID свойство, которое указывает формат, который фактически использовался, например, если сканер не поддерживает JPG. Если файл еще не находится в формате JPG, вам придется преобразовать его впоследствии, например, с помощью Wia.ImageProcess объект. MSDN показывает пример этого.

Я заметил, что константы, которые вы использовали для JPG и PNG, являются теми, которые я использую для BMP. Может ли это быть вашей проблемой?

Другие вопросы по тегам