哈哈,LeeChange 也有说错的时候啊,白色应该是三个字节都为 255 的点啊:)
lfeng15:
你是用 VFW 采集吗?用 capSetCallBackOnFrame 取得位图缓冲吗?
那么,你可以以如下方法将它转换为一个位图:
[1]
建立 bmpCap: ...
建立 infoCap: capGetVideoFormat(wndCap, @infoCap, sizeof(TBitmapInfo));
开始回调: capSetCallBackOnFrame(wndCap, procCap)
...
[2]
function procCap(hWnd:HWND; lpVHdr
![Stick Out Tongue :P :P](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f61b.png)
VIDEOHDR):LongInt; stdcall;
begin
result := 0;
if isLock then exit;
FrameToBitmap(bmpCap, lpvhdr^.lpData, infoCap);
end;
[3]
procedure FrameToBitmap(Bitmap: TBitmap; FrameBuffer: pointer; BitmapInfo: TBitmapInfo);
begin
if bitmapInfo.bmiHeader.BiCompression = bi_RGB then
with Bitmap do
setDiBits(canvas.handle, handle, 0, BitmapInfo.bmiHeader.biheight,
FrameBuffer, BitmapInfo, DIB_RGB_COLORS);
end;