Y
yxgszm
Unregistered / Unconfirmed
GUEST, unregistred user!
我做一个摄像头视频采集程序,现在一切都妥当,就是在回调函数中将帧转换为流数据时要出问题,有关程序如下,麻烦各位帮我看一下,现在正等着急用这段代码,望大家帮我尽快揭开疑团,十分感谢!
[] TSendBuf = record
Size : Integer;
data : array[0..930000] of Byte;
end;
procedure Framecallbackproc(hWnd:HWND;
lpVHdr:Longint);
stdcall;
var
DataPoint : ^byte;
DibLen,i : integer;
VideoStr : PLPVIDEOHDR;
SendBuf : TSendBuf;
fs : TFileStream;
begin
//定义一个文件流
fs := TFileStream.Create('c:/test.bmp', fmCreate);
//转换从回调函数中得到的指针
VideoStr:=PLPVIDEOHDR(lpVHdr);
//得到返回的数据大小
DibLen:= VideoStr^.dwBufferLength;
GetMem(DataPoint,DibLen);
//将帧数据COPY到一个内存中
CopyMemory(DataPoint,VideoStr^.lpData,Diblen);
//将内存中数据写入通讯结构体,结构体中包含数据和长度
for i:= 1 to DibLendo
begin
SendBuf.data := DataPoint^;
Inc(DataPoint);
end;
SendBuf.Size := DibLen;
fs.WriteBuffer(SendBuf.Data, SendBuf.Size);//数据写入文件流
fs.Free;
end;
该回调函数执行后,不能预览C:/TEST.BMP图象,为什么呢?是不是数据采集有错?
注:回调函数执行后SendBuffer里有数据
[] TSendBuf = record
Size : Integer;
data : array[0..930000] of Byte;
end;
procedure Framecallbackproc(hWnd:HWND;
lpVHdr:Longint);
stdcall;
var
DataPoint : ^byte;
DibLen,i : integer;
VideoStr : PLPVIDEOHDR;
SendBuf : TSendBuf;
fs : TFileStream;
begin
//定义一个文件流
fs := TFileStream.Create('c:/test.bmp', fmCreate);
//转换从回调函数中得到的指针
VideoStr:=PLPVIDEOHDR(lpVHdr);
//得到返回的数据大小
DibLen:= VideoStr^.dwBufferLength;
GetMem(DataPoint,DibLen);
//将帧数据COPY到一个内存中
CopyMemory(DataPoint,VideoStr^.lpData,Diblen);
//将内存中数据写入通讯结构体,结构体中包含数据和长度
for i:= 1 to DibLendo
begin
SendBuf.data := DataPoint^;
Inc(DataPoint);
end;
SendBuf.Size := DibLen;
fs.WriteBuffer(SendBuf.Data, SendBuf.Size);//数据写入文件流
fs.Free;
end;
该回调函数执行后,不能预览C:/TEST.BMP图象,为什么呢?是不是数据采集有错?
注:回调函数执行后SendBuffer里有数据