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, но я пропуснах. Отговорът е приет с благодарност. PhilW. - person PhilW; 27.09.2011

Забелязах, че константите, които сте използвали за JPG и PNG, са тези, които използвам за BMP. Възможно ли е това да е вашият проблем?

person Mark Ainsworth    schedule 02.01.2013