Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сохранить фрейм в файл


Автор: Zlo 31.10.2009, 15:03
Нужно собственно получить изображение с веб-камеры и сохранить его в файл, для простаты в bmp.
В инете нарыл пару исходников, но в них обоих не пашет сохранение файла. Все вроде привильно сделано но... файл не сохраняется. 
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Image1: TImage;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
    hWndC : THandle;
    CapturingAVI : bool;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
const WM_CAP_SEQUENCE = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;

function capCreateCaptureWindowA(lpszWindowName : PCHAR;
dwStyle : longint;
x : integer;
y : integer;
nWidth : integer;
nHeight : integer;
ParentWin : HWND;
nId : integer): HWND;
STDCALL EXTERNAL 'AVICAP32.DLL';

procedure TForm1.Button1Click(Sender: TObject);//Создаем окно, подключаем драйвер
begin
hWndC:=capCreateCaptureWindowA(nil, WS_CHILD or WS_VISIBLE, Image1.Left, Image1.Top, Image1.Width, Image1.Height, Form1.Handle, 0); //То куда пойдет изображение
if hWndC <> 0 then
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 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;

procedure TForm1.Button3Click(Sender: TObject);
begin
if hWndC <> 0 then
SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);//Грабим изображение из потока и показываем его в имейдж
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if hWndC <> 0 then
SendMessage(hWndC,WM_CAP_FILE_SAVEDIB,0,longint(pchar('C:\11111111.bmp'))); Сохраняем файл... Вот тут то оно и не схраняет, не могу понять почему
end;

end.


Собственно изображение я сохраняю так:
Код

procedure TForm1.Button4Click(Sender: TObject);
begin
if hWndC <> 0 then
SendMessage(hWndC,WM_CAP_FILE_SAVEDIB,0,longint(pchar('C:\11111111.bmp'))); Сохраняем файл... Вот тут то оно и не схраняет, не могу понять почему
end;

Но файл не появляется :( Подскажите как правильно это сделать? Может проблема в том, что неправильно передается последний параметр?

Автор: Zlo 7.12.2009, 23:21
Ребята! Неужели никто не может помочь?????

Автор: Zlo 8.12.2009, 00:42
Такс, А может ктонить подсказать что делает эта операция:
Код

longint(pchar('C:\11111111.bmp'))

Файлик все таки создается в папке с прогой но его имя "С" и он без расширения, понять не могу почему....

Автор: Snowy 8.12.2009, 11:08
Попробуй сдвоить бэкслэш
dword(pchar('C:\\11111111.bmp'))

Автор: Zlo 8.12.2009, 13:06
Цитата(Snowy @  8.12.2009,  11:08 Найти цитируемый пост)
Попробуй сдвоить бэкслэш
dword(pchar('C:\\11111111.bmp')) 

Не, не катить...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)