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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 13:32   #1
hoba
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 40
По умолчанию Сохранить с Web-камеры изображение в файл

Доброго времени суток, я уже создавал однажды тему, там было про парадокс. Сейчас я разбираюсь c FireBird. Файл сохранить в эту таблицу смог, изображение с вебке тоже получил(списал конечно ). Но вот организовать сохранение в базу не получилось. Вот то что я навая:
Цитата:
unit UnitTwain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
MultiTWAIN, Menus, ExtCtrls, StdCtrls, Grids, DBGrids, DB, IBDatabase,
IBCustomDataSet, IBTable;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
SelectSource1: TMenuItem;
Accquire1: TMenuItem;
Hcm: TLabel;
Label1: TLabel;
Wcm: TLabel;
Label2: TLabel;
Label3: TLabel;
Colors: TLabel;
Image1: TImage;
IBTable1: TIBTable;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure File1Click(Sender: TObject);
procedure Accquire1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
photoStream: TMemoryStream;

implementation

{$R *.DFM}
var
MyBitMap: TBitMap;

procedure TForm1.File1Click(Sender: TObject);
begin
{Выбираем источник данных}
TWAIN_SelectImageSource(Handle);
end;

//здесь я получаю изображение с камеры
procedure TForm1.Accquire1Click(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

photoStream:=TMemoryStream.Create; //Создаю поток

{Получаем указатель на графические данные}
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,ffNumbe r,8,3)+' cm';
// Hcm.Caption :=floatToStrF(100/PInfo.biYPelsPerMeter*Height,ffNumb er,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.H andle,0,0,Width,Height,dat,0,0);
except
{Обрабатываем наиболее вероятную ошибку связанную с не хваткой ресурсов
для загрузки изображения}
on EOutOFResources do
MessageDlg('TBitMap: Нет ресурсов для загрузки изображения!',
mtError,[mbOk],0);
end;
{Отображаем графические данные}

MyBitMap.SaveToStream(photoStream); //пытаюсь засунуть в поток изображение. Здесь возникает ошибка

Image1.Picture.Graphic.LoadFromStre am(photoStream); //Из потока в TImage для проверки

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

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
{Создаем битовую матрицу}
MyBitMap:=TBitMap.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
IBDatabase1.Open;
IBTable1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
IBTable1.Close;
IBDatabase1.Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
IBTable1.Insert;
TBlobField(IBTable1.FieldByName('ph oto')).LoadFromStream(photoStream); //сохрание в BLOB из потока
IBTable1.Post;
end;

end.
Подскажите что мне делать? Я хоть правильно двигаюсь?
hoba вне форума Ответить с цитированием
Старый 15.10.2009, 13:46   #2
hoba
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 40
По умолчанию

Я что не досмотрел, ошибка появляется не здесь:
MyBitMap.SaveToStream(photoStream); //пытаюсь засунуть в поток изображение
А строкой дальше:
Image1.Picture.Graphic.LoadFromStre am(photoStream); //Из потока в TImage для проверки
Сейчас закоментировал эту строку. В базу сохранить удалось. Значит осталась проблема считать из базы.
hoba вне форума Ответить с цитированием
Старый 15.10.2009, 14:04   #3
hoba
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 40
По умолчанию

Сообразил так:
Код:
Image1.Picture.Bitmap.LoadFromStream(photoStream);
Ошибок нет... изображение тоже не появляется.... Попробовал добавить
Код:
Image1.Repaint;
Ничего.
hoba вне форума Ответить с цитированием
Старый 16.10.2009, 13:23   #4
hoba
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 40
По умолчанию

Спасибо что послушали, я разобрался
Код:
   
photoStream.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(photoStream);
Всего-то одной строчки не хватило
hoba вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранить в файл из listbox cemen13 Общие вопросы Delphi 4 07.09.2009 17:15
Сохранить/считать изображение в/из файл(а). amdbodia Общие вопросы C/C++ 4 26.05.2009 20:05
Как сохранить изображение Image и всё что на нём, в файл? Лукманов Александр Мультимедиа в Delphi 3 24.05.2009 00:16
Ответ web-сервера браузеру - изображение TpyHT C/C++ Сетевое программирование 3 05.05.2009 22:34
файл сохранить на Хостенге atlon Общие вопросы C/C++ 3 10.02.2009 21:04