Содержание материала

Пример программы

 

Полный текст примера можно взять отсюда. Мы рассмотрим только функцию получения данных с TWAIN устройства:

Code:

procedure TForm1.Accquire1Click(Sender: TObject);

var

dat: hBitMap;

PInfo: PBitMapInfoHeader;

Height, Width: integer;

 

{Функция возведения 2 в степень s}

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;

   {Отображаем графические данные}

   Image1.Picture.Graphic := MyBitMap;

   {Освобождаем память занятую графическими данными}

   TWAIN_FreeNative(dat);

end;

end;

 

Обработка ошибок необходима, так как объект TBitMap имеет серьезные ограничения на размер создаваемого изображения. При этом производится обработка наиболее вероятной ошибки, в случае возникновения другой ошибки, ее обработка будет передана обработчику по умолчанию. Обработка ошибки в данном случае заключается в выдаче диагностического сообщения, в прикладной программе можно реализовать выполнение любых необходимых действий, например, произвести уменьшение разрешения и повторно подать на загрузку в TBitMap.

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить