我想在画面中加上几条线段(标尺),用的是TVideoCap。
我在OnFrameCallback函数中加了以下几行代码:procedure TVideoForm.VideoCap1FrameCallback(sender: TObject;
lpVhdr: PVIDEOHDR);
var
hdc,hOldPen:Integer;
begin
hdc := GetDC(VideoCap1.Handle);
hOldPen := SelectObject(hdc, GetStockObject(BLACK_PEN));
MoveToEx(hdc, 0, 0, nil);
LineTo(hdc, 60, 60);
SelectObject(hdc, hOldPen);
ReleaseDC(VideoCap1.Handle, hdc);
end;所画的线已经出来了,就是闪得厉害。我觉得应该在lpVhdr指向的内存里画图,但是不知道具体怎么做,请各位DX指点,谢谢!附
lpVHdr :
Address of a VIDEOHDR structure containing information about the captured frame. TVIDEOHDR = record
lpData:pByte; // pointer to locked data buffer
dwBufferLength:DWORD; // Length of data buffer
dwBytesUsed:DWORD; // Bytes actually used
dwTimeCaptured:DWORD; // Milliseconds from start of stream
dwUser:DWORD; // for client's use
dwFlags:DWORD; // assorted flags (see defines)
dwReserved: array [0..4] of DWORD; // reserved for driver
end;
我在OnFrameCallback函数中加了以下几行代码:procedure TVideoForm.VideoCap1FrameCallback(sender: TObject;
lpVhdr: PVIDEOHDR);
var
hdc,hOldPen:Integer;
begin
hdc := GetDC(VideoCap1.Handle);
hOldPen := SelectObject(hdc, GetStockObject(BLACK_PEN));
MoveToEx(hdc, 0, 0, nil);
LineTo(hdc, 60, 60);
SelectObject(hdc, hOldPen);
ReleaseDC(VideoCap1.Handle, hdc);
end;所画的线已经出来了,就是闪得厉害。我觉得应该在lpVhdr指向的内存里画图,但是不知道具体怎么做,请各位DX指点,谢谢!附
lpVHdr :
Address of a VIDEOHDR structure containing information about the captured frame. TVIDEOHDR = record
lpData:pByte; // pointer to locked data buffer
dwBufferLength:DWORD; // Length of data buffer
dwBytesUsed:DWORD; // Bytes actually used
dwTimeCaptured:DWORD; // Milliseconds from start of stream
dwUser:DWORD; // for client's use
dwFlags:DWORD; // assorted flags (see defines)
dwReserved: array [0..4] of DWORD; // reserved for driver
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货