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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2009, 23:15   #1
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию Подскажите как добавить изображение со сканера в TImage

Есть код получения изображения со сканера:
Цитата:
begin
TWAIN_LogFile(1);
TWAIN_SetHideUI(false);
if TWAIN_OpenDefaultSource() then
begin
TWAIN_SetXferCount(1);
if not TWAIN_SetAutoScan(false) then
Application.MessageBox('SetAutoScan (FALSE) failed - scanner cannot single-scan?', 'TWAIN Alert', MB_OK);
{ If you don't have a Window handle, pass 0: }
hdib := TWAIN_Acquire(self.Handle);
if hdib<>0 then
begin
{ <your image processing here> }
DIB_Free(hdib)
end
end;
if TWAIN_LastErrorCode()<>0 then
begin
TWAIN_ReportLastError('Unable to scan.')
end;
end;
Подскажите что нужно дописать чтобы картинка загрузилась в TImage.

Либо что можно добавить вот в такой код, чтобы картинка грузилась в Image и удалялась с диска:
Цитата:
begin
TWAIN_LogFile(1);
TWAIN_SetHideUI(false);
TWAIN_SetFileAppendFlag(false);
TWAIN_SetJpegQuality(75);
if TWAIN_OpenDefaultSource() then
begin
TWAIN_SetXferCount(1);
if not TWAIN_SetAutoScan(false) then
Application.MessageBox('SetAutoScan (FALSE) failed - scanner cannot single-scan?', 'TWAIN Alert', MB_OK);
{ If you don't have a Window handle, pass 0: }
TWAIN_AcquireToFilename(self.Handle , 'c:\image.bmp')
end;
if TWAIN_LastErrorCode()<>0 then
TWAIN_ReportLastError('Unable to scan.')
end;
Во втором коде я пробовал добавить:
Цитата:
Form1.Image1.Picture.LoadFromFile(' c:\image.bmp');
А как тогда удалить файл с картинкой?
Если всё откладывать на потом, то потом будет всё.

Последний раз редактировалось Herly; 30.12.2009 в 23:51.
Herly вне форума Ответить с цитированием
Старый 31.12.2009, 11:27   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

для работы с MultiTWAIN интерфейсом обычно использую следующую конструкцию...
Код:
var dat: hBitMap;
     rbmp: tbitmap;
...

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
      MessageDlg('TBitMap: Нет ресурсов для загрузки изображения!',
                 mtError,[mbOk],0);
  end;
   //Отображаем графические данные
   //Canvas.Draw(10,10,MyBitMap);
   Image1.Picture.Graphic:=rbmp;
не забываем также очищать
Код:
TWAIN_FreeNative(dat)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 31.12.2009, 20:09   #3
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

Я использую EZtwain, там выдавался самой прогой код приведённый выше(2 коада).
а ваш вариант выдаёт ошибку.
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 31.12.2009, 21:04   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

просто для справки... MultiTWAIN это дельфи-хэдеры EZtwain интерфейса либы EZTWAIN.DLL
Цитата:
...а ваш вариант выдаёт ошибку.
...наверно потому, что вы просто неправильно его используете... неплохо-бы озвучивать что за ошибку выдает.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.01.2010, 12:37   #5
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

А MultiTwain, его надо как-то ставить или запускать?(поясните плиз что такое хедеры) Можно на него ссылочку если это прога.
А ошибка вот такая: Project Project1.exe raised exception class EAccessViolation with message 'Asses violation at adress 00442106 in module 'Project1.exe'. Read of adress 00000000'.
Если всё откладывать на потом, то потом будет всё.

Последний раз редактировалось Herly; 01.01.2010 в 12:45.
Herly вне форума Ответить с цитированием
Старый 01.01.2010, 13:06   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

у вас практически тоже самое, за исключением того, что нужно было добавить получение указателя на данные... метода следующая... сначала создаем битовую матрицу в которую будем записывать данные...
Код:
 //Создаем битовую матрицу
 rbmp:=TBitMap.Create;
потом выбираем источник...
Код:
 TWAIN_SelectImageSource(Handle);
и собственно передаем запрос на получение-сканирование...
Код:
var
 dat: hBitMap;
 PInfo: PBitMapInfoHeader;
 Height,Width:integer;
begin
 //Получаем указатель на графические данные
 dat:=TWAIN_AcquireNative(Handle,0);
 if dat <> 0 then begin
  //Получаем указатель на область памяти содержащей DIB
  //данные и блокируем область памяти
  PInfo:=GlobalLock(dat);

  //Анализируем полученные данные
  try
  Height:=296;////PInfo.biHeight;
  Width:=210;//PInfo.biWidth;
  except end;

  //Разблокируем память
  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 end;

   //Отображаем графические данные // с image- уже можем делать, что угодно
   Image1.Picture.Graphic:= rbmp;  //Image1.Picture.Assign(rbmp); //Image1.Canvas.draw(10,10,rbmp);
  
   //Освобождаем память занятую графическими данными
   TWAIN_FreeNative(dat);
 end;
 form1.SetFocus
end;
модуль MultiTwain прилагаю...
Вложения
Тип файла: txt MultiTWAIN.txt (11.3 Кб, 269 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 01.01.2010 в 13:08.
raxp вне форума Ответить с цитированием
Старый 01.01.2010, 13:44   #7
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

А что с этм модулем делать-то?
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 01.01.2010, 13:57   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

uses MultiTWAIN;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.01.2010, 13:59   #9
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

а то что в txt нужно добавить в новую формачку?
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 01.01.2010, 14:39   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти драйвер для сканера Mustek BearPaw 1200CU Plus мотя Компьютерное железо 5 04.05.2010 12:49
Подскажите нащёт Timage. Extez1 Помощь студентам 3 19.04.2009 15:55
ПО для сканера milancrash Компьютерное железо 1 31.03.2009 08:57
добавить TImage в Tlistbox ZhekON Общие вопросы Delphi 1 20.02.2008 23:19