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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2013, 21:59   #1
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
Вопрос Веб камера и Image

Доброго времени суток!!!
Я пишу программу для захвата фото с камеры. На компоненты Panel, Button и т.д. у меня получается выводить картинку, а вот на Image ни как. Подскажите пожайлуста.
Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,ShellAPI;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const WM_CAP_START = WM_USER;
WM_CAP_STOP = WM_CAP_START + 68;
WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
WM_CAP_SAVEDIB = WM_CAP_START + 25;
WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
WM_CAP_SEQUENCE = WM_CAP_START + 62;
WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;

function capCreateCaptureWindowA(lpszWindowN ame : PCHAR;
dwStyle : longint;
x : integer;
y : integer;
nWidth : integer;
nHeight : integer;
ParentWin : HWND;
nId : integer): HWND;
stdcall external 'AVICAP32.DLL';
var
Form1: TForm1;

implementation
{$R *.dfm}


var hWndC : THandle;

procedure TForm1.Button1Click(Sender: TObject);
begin
hWndC := capCreateCaptureWindowA('My Own Capture Window',
WS_CHILD or WS_VISIBLE ,
0,
0,
Image1.Width,
Image1.Height,
Image1.Picture.Bitmap.Canvas.Handle ,
0);

if hWndC <> 0 then
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
hWndC := 0;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
end;
end;



end.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 26.01.2013, 23:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

hwndC=0 потому что.
Код:
Image1.Picture.Bitmap.Canvas.Handle
это HDC, а не HWND.
(хендл холста скажем так, а не окна)
IMage не имеет своего окна.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.01.2013, 00:02   #3
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Как тогда сохранить фото с камеры???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 27.01.2013, 01:11   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

задача 1 в 1 с моей .. только мне она не к спеху))) .. на скорую руку решил так:
Код:
function capCreateCaptureWindowA(lpszWindowName : PCHAR;
  dwStyle : longint;
  x : integer;
  y : integer;
  nWidth : integer;
  nHeight : integer;
  ParentWin : HWND;
  nId : integer): HWND; stdcall external 'AVICAP32.DLL';

var
  Form1: TForm1;
  hWndC : THandle;

implementation

{$R *.dfm}

uses unit2, JPEG;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.CreateForm(tform2,form2);
  Form2.Show;
  hWndC := capCreateCaptureWindowA('My Own Capture Window', WS_CHILD or WS_VISIBLE , 0,0,
    form2.Width, Form2.Height, Form2.Handle, 0);
  if hWndC <> 0
  then
  begin
    SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
    SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0); //забираем картинку с вебкамеры
    image1.Canvas.CopyRect(image1.clientrect,form2.Canvas,form2.ClientRect);
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  jpgImg: TJPEGImage;
  locTmp : string;
begin
  locTmp := GetEnvironmentVariable(PChar('TEMP'));
  jpgImg := TJPEGImage.Create;
  jpgImg.Assign(image1.Picture.Bitmap);
  jpgImg.SaveToFile(locTmp+'\tmp.jpg');
  jpgImg.Free;
  SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);  //"отключаемся" от веб-камеры
  hWndC := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  button1click(nil);
  button4click(nil);
  Application.Terminate;
end;
знаю что коряво, но мне пока не до него ... будет время - буду разбираться
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 27.01.2013, 10:37   #5
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Спасибо!
Не первый раз выручаешь.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 27.01.2013, 13:02   #6
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,ShellAPI,unit2;

type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const WM_CAP_START = WM_USER;
WM_CAP_STOP = WM_CAP_START + 68;
WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
WM_CAP_SAVEDIB = WM_CAP_START + 25;
WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
WM_CAP_SEQUENCE = WM_CAP_START + 62;
WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;


function capCreateCaptureWindowA(lpszWindowN ame : PCHAR;
dwStyle : longint;
x : integer;
y : integer;
nWidth : integer;
nHeight : integer;
ParentWin : HWND;
nId : integer): HWND;
stdcall external 'AVICAP32.DLL';
var
Form1: TForm1;

implementation
{$R *.dfm}

var hWndC : THandle;

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(tform2,form2 );
hWndC := capCreateCaptureWindowA('My Own Capture Window', WS_CHILD or WS_VISIBLE , 0,0,form2.Width, Form2.Height, Form2.Handle, 0);
if hWndC <> 0
then
begin
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0); //забираем картинку с вебкамеры
SendMessage(hWndC,WM_CAP_SAVEDIB,0, longint(pchar('21.bmp')));
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //"отключаемся" от веб-камеры
hWndC := 0;
end;
end;

end.
Вот переработаный код. Просто нажимаешь на кнопку и без лишних окон получаешь хорошее изображение. Спасибо тебе за твой код, я из него это сделал. Качество фоток приемлемое для веб камер.
Вложения
Тип файла: rar VebCamera.rar (437.3 Кб, 170 просмотров)
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 27.01.2013, 16:19   #7
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

У меня возникла новая проблема. Я решил этот код в dll упрятать. Сама библиотека компилится и всё ОК. Но когда пытаюсь использовать из программы, пишет "Не найдена точка входа в vebcamera"
Подскажите пожайлуста, код в простой программе 100% рабочий. Помогите перенести в dll.
Вложения
Тип файла: rar WinRAR archive.rar (478.4 Кб, 33 просмотров)
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 27.01.2013, 17:01   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

приведи в соответствие регистры названий в: самой процедуре, в экспорте и в вызывающей программе
да и загружать статически библиотеку нет никакого смысла
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 27.01.2013, 17:15   #9
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

А разве delphi 7 регистрозависимый???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 27.01.2013, 17:27   #10
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
Вопрос

Спасибо!
Теперь запускается программа. Но когда нажимаю на кнопку создания изображения с камеры, вылетает ошибка.
Вложения
Тип файла: doc Документ Microsoft Word.doc (27.0 Кб, 22 просмотров)
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
веб-камера вместо мыши gunguru Помощь студентам 5 20.04.2012 17:21
Есть веб-камера от ноута Altera Компьютерное железо 10 07.08.2011 13:06
Веб камера Genius islim 300x Эльмир777 Мультимедиа в Delphi 0 14.03.2011 10:29
НЕ РАБОТАЕТ ВЕБ-КАМЕРА лабинск Компьютерное железо 28 28.07.2010 14:08
веб камера CNR-CP5G РаТи Компьютерное железо 0 13.03.2010 16:15