Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2011, 18:25   #1
Vivaldi7
Новичок
Джуниор
 
Регистрация: 10.10.2011
Сообщений: 2
Восклицание жение качества(сжатие) отсканированного изображения

Здравствуйте не могу уменьшить качество tiff картинки.Сканирую вот этим кодом.
procedure TForm1.btn3Click(Sender: TObject);
var fileName: array [0..260] of Char;
i: Integer;
hdib: Cardinal;

begin
begin
TWAIN_LogFile(1);
TWAIN_SetFileAppendFlag(true);
TWAIN_SetJpegQuality(100);
if TWAIN_OpenDefaultSource() then
begin
TWAIN_SetXferCount(-1);
TWAIN_SetAutoScan(true);
TWAIN_SetMultiTransfer(true);
i := 1;
repeat
StrFmt(fileName, 'c:\image\%d.tif', [i]);
{ If you don't have a Window handle, pass 0: }
hdib := TWAIN_Acquire(self.Handle);
if hdib=0 then
break;
TWAIN_WriteNativeToFilename(hdib, fileName);
DIB_Free(hdib);
i := i+1;
stat:=i div 2
until TWAIN_State()<5;
TWAIN_CloseSource()
end;
if TWAIN_LastErrorCode()<>0 then
TWAIN_ReportLastError('Сканирование невозможно');

end;
Мне кажется что сжатие определяет строчка TWAIN_SetJpegQuality(100); но изменяя её выходной файл меньше не становится 1,07мб.А мне надо чтобы он занимал кб 50.Этот код сгенерировал EZTPro3.У меня делфи 7.
Vivaldi7 вне форума Ответить с цитированием
Старый 11.10.2011, 01:38   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

...и с каких пор там TIFF ?

Нативная подержка сжатия в JPEG не всегда работает, лучше использовать внешнее сжатие:
Код:
procedure TForm1.scanClick(Sender: TObject);
var
 dat: hBitMap;
 PInfo: PBitMapInfoHeader;
 Height,Width:integer;
 //
 jpeg  : TJPEGImage;
begin
 // cоздаем битовую матрицу
 rbmp:= TBitMap.Create;
 // скрываем окно показа драйвера
 TWAIN_SetHideUI(1);

 //Получаем указатель на графические данные
 dat:=TWAIN_AcquireNative(Handle,0);
 if dat <> 0 then begin
  // получаем указатель на область памяти содержащей DIB
  // данные и блокируем область памяти
  PInfo:=GlobalLock(dat);
  //Анализируем полученные данные
  try
   Height:= PInfo.biHeight;
   Width := PInfo.biWidth;
  except end;

  //Wcm.Caption :=floatToStrf(100/PInfo.biXPelsPerMeter*Width,ffNumber,8,3)+' cm';
  //Hcm.Caption :=floatToStrf(100/PInfo.biYPelsPerMeter*Height,ffNumber,8,3)+' cm';
  //Colors.Caption := floatToStrf(stp2(PInfo.biBitCount),ffNumber,8,0)+ ' цветов';

  //Разблокируем память
  GlobalUnlock(dat);
  // передаем в битовую матрицу графические данные
  // и устанавливаем перехват ошибок
  try
   rbmp.Palette :=TWAIN_CreateDibPalette(dat);
   rbmp.Width := Width;
   rbmp.Height := Height;
   TWAIN_DrawDibToDC(rbmp.Canvas.Handle,0,0,Width,Height,dat,0,0);
  except
   // обрабатываем наиболее вероятную ошибку связанную с не хваткой ресурсов
   // для загрузки изображения
   on EOutOFResources do Messagebox(0,'TBitMap: Недостаточно ресурсов...', 'Error',0);
  end;

   // отображаем графические данные
   Image1.Picture.Graphic:= rbmp;
   // сохраняем сразу в jpg
   jpeg:= TJPEGImage.Create;
   try
    jpeg.CompressionQuality := 100;
    jpeg.Assign(rbmp);
    jpeg.SaveToFile('test.jpg');
   except end;
   jpeg.free;

   // освобождаем память занятую графическими данными
   TWAIN_FreeNative(dat);
 end;
 form1.SetFocus
end;
p.s.: а тем на форуме про EZTwain хватает
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 85 тыс рублей в месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
статистический контроль качества Secretnaja Общие вопросы C/C++ 2 08.05.2011 08:55
Потеря качества изображения при копировании Herly Общие вопросы Delphi 14 11.02.2010 20:08
Проверка качества датчика псевдослучайных чисел SerG1ON Microsoft Office Excel 0 22.10.2009 15:38