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

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

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

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

This the code I am currently using:

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


person PhilW    schedule 26.09.2011    source источник
comment
хм, похоже, вам придется конвертировать изображение самостоятельно   -  person David Heffernan    schedule 26.09.2011


Ответы (2)


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

person Remy Lebeau    schedule 26.09.2011
comment
Спасибо, Реми. Я просмотрел страницу примеров MS, но пропустил ее. Ответ принят с благодарностью. Фил У. - person PhilW; 27.09.2011

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

person Mark Ainsworth    schedule 02.01.2013