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

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

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2010, 05:57   #11
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вот, строчку кода для сохранения отсканированного документа в файл я сделал.
Код:
procedure TForm1.BtnClick(Sender: TObject);
var
 dat: hBitMap;
 PInfo: PBitMapInfoHeader;
 Height,Width:integer;
{Функция возведения 2 в степень}
function stp2(s:byte):longint;
 var
  m: longint;
  i: byte;
 begin
  m:=2;
  for i:=2 to s do m:=m*2;
  stp2:=m;
 end;

begin
 {Получаем указатель на графические данные}
 dat:=TWAIN_AcquireNative(Handle,0);
 if dat <> 0 then begin
  {Получаем указатель на область памяти содержащей DIB
   данные и блокируем область памяти}
  PInfo:=GlobalLock(dat);
  {Анализируем полученные данные}
  Height:=PInfo.biHeight ;
  Width:=PInfo.biWidth ;
  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
   MyBitMap.Palette :=TWAIN_CreateDibPalette(dat);
   MyBitMap.Width := Width;
   MyBitMap.Height := Height;
   TWAIN_DrawDibToDC(MyBitMap.Canvas.Handle,0,0,Width,Height,dat,0,0);
  except
   {Обрабатываем наиболее вероятную ошибку связанную с не хваткой ресурсов
    для загрузки изображения}
   on EOutOFResources do
      MessageDlg('TBitMap: Нет ресурсов для загрузки изображения!',
                 mtError,[mbOk],0);
  end;
   {Отображаем графические данные}
   //Canvas.Draw(10,10,MyBitMap);
 //  Image1.Picture.Graphic:=MyBitMap;
   Form1.Image1.Picture.Bitmap.SaveToFile('1.jpeg');
   MyBitMap.SaveToFile('1.jpeg');
   {Освобождаем память занятую графическими данными}
   TWAIN_FreeNative(dat);
 end;

end;
В связи с этим появилось 3 вопроса:
1. Что делать если мне нужно каждую отсканированную страницу сохранять в отдельный файл? Сейчас если я сканирую пачку из нескольких страниц, то в файл сохраняется только последняя отсканированная страница.
2. Вариант, что не грузить после сканирования страницу в Image, чтобы ускорить процесс сканирования - не работает. Может еще есть варианты?
3. Что педедавать в качестве переменной, например, i, чтобы ProgressBar1 отображал ход процесса сканирования. То есть если написать так:
Код:
ProgressBar1.StepBy(<Что как передать сюда количество отсканированных страниц?>)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2010, 08:32   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что делать если мне нужно каждую отсканированную страницу сохранять в отдельный файл?
Примени хитрость:
Код:
MyBitMap.SaveToFile(formatdatetime('Image yyy-mm-dd hh-nn-ss',now)+'.jpeg');
Цитата:
что не грузить после сканирования страницу в Image
Опять ты с памперсами в стиралку лезешь... Зачем ты с Image связался?
Цитата:
отображал ход процесса сканирования
Насколько я знаю у сканеровых дров есть окно с прогрессом. Зачем еще одно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2010, 08:41   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Насколько я знаю у сканеровых дров есть окно с прогрессом. Зачем еще одно?
Ну, в идеале я хотел свой прогрессбар сделать, а стандартное, если можно - скрыть с глаз до окончания сканирования.
Цитата:
Опять ты с памперсами в стиралку лезешь... Зачем ты с Image связался?
Кажется, сейчас я опять услышу про PaintBox
Ну применил я твой код, Stilet, сохраняется, но в один файл. Второй не сохраняется. Может я его не там разместил эту строчку? Я разместил ее после
Код:
 {Отображаем графические данные}
   //Canvas.Draw(10,10,MyBitMap);
 //  Image1.Picture.Graphic:=MyBitMap;
 //  Form1.Image1.Picture.Bitmap.SaveToFile('1.jpeg');
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 30.06.2010 в 08:49.
artemavd вне форума Ответить с цитированием
Старый 30.06.2010, 08:44   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а стандартное, если можно - скрыть с глаз до окончания сканирования.
А вот это по-моему нельзя. Это окошко самого драйвера.
Цитата:
сейчас я опять услышу про PaintBox
Если ты этого не понял ранее то бесполезно говорить. Хочешь Image - работай с ним. Я уговаривать не буду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2010, 08:51   #15
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Если ты этого не понял ранее то бесполезно говорить. Хочешь Image - работай с ним. Я уговаривать не буду.
Ну ладно ладно, че ты уж так сразу-то)). Попробую использовать PaintBox. Но сейчас мне нужно со сканированием разобраться, чтобы сканировались все страницы каждая в свой файл.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2010, 09:20   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Когда я установил по ссылке Котова ту тулзу, она предложила мне написать за меня программу сканирования. Я выбрал сканер, тип и настройки изображения, и вот что она мне выкатила:
Код:
var fileName: array [0..260] of Char;
    i: Integer;
begin
   TWAIN_LogFile(0);
   TWAIN_SetHideUI(true);
   TWAIN_SetFileAppendFlag(false);
   if TWAIN_OpenSource('Canon MF3200 Series') then   begin
      TWAIN_SetPixelType(0);
      TWAIN_SetBitDepth(1);
      TWAIN_SetResolution(200);
      TWAIN_SetPaperSize(1);
      TWAIN_SetXferCount(-1);
      TWAIN_SetMultiTransfer(true);
         StrFmt(fileName, 'c:\temp\%d.tif', [tag]);
         TWAIN_AcquireToFilename(self.Handle, fileName);
         tag := tag+1;
      TWAIN_CloseSource();
   end;
   if TWAIN_LastErrorCode()<>0 then
      TWAIN_ReportLastError('Unable to scan.')
end;
кое-что я от себя поправил, но в целом вполне прокатывает.
Да и если чесно мне совсем не нужно было отображать то что отсканированно на экране, потому что я это могу на бумаге глянуть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2010, 10:07   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

И где разместить этот код лучше? В событии кнопки?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2010, 10:09   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я в кнопку кинул...
Думал в таймер, но могу и не успевать подавать листы, а на кнопку самое оно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2010, 11:01   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А что это за TWAIN_... как его объявить? И откуда это взялось?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2010, 11:15   #20
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

"А что это за TWAIN_..."
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Работа с БД. Xeon332 Фриланс 12 22.03.2010 22:22
работы со сканером leon777 Общие вопросы Delphi 2 05.02.2010 19:12
Книги про работу со сканером Stilet Обсуждение статей 2 09.11.2009 08:24
Работа со сканером Terran Софт 3 06.01.2009 13:58
Twain или работа со сканером в Delphi D-mon Win Api 2 08.12.2007 17:23