作者buliQ (小草莓)
看板C_and_CPP
標題[問題] BCB抓webcam,並讀取其RGB值
時間Thu Dec 10 21:54:10 2009
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
用BCB抓webcam的影像,以下是我程式的一小部份
ghCapWnd = capCreateCaptureWindow ( "Capture Window",
WS_CHILD | WS_VISIBLE ,0,0,Panel1->Width,Panel1->Height,Panel1->Handle, 0);
capGrabFrameNoStop(ghCapWnd);
capEditCopy(ghCapWnd);
Image1->Picture->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->
GetAsHandle(CF_BITMAP),0);
for(int i=0;i<10;i++)
{
a=capDriverConnect(ghCapWnd,i);
if( a ) break
;
}
if( !a )
ShowMessage("攝影機連接失敗..");
// if (!capOverlay(ghCapWnd,true))
// {
capPreviewRate(ghCapWnd,66);
capPreview(ghCapWnd,true);
// }
}
由於在網路上找到的程式,都是擷取到panel裡
但是我需要把圖片存下來,並且作一些即時的運算(取得RGB值)
所以就把影像暫存到剪貼簿上,再放到Image上
我是用scanline去讀RGB值
但是現在卻發現,存下來的圖是32bit
我們推測應該是因為變成32bit的原因
才使得抓到的RGB值都是錯誤的
希望得到的正確結果:
我只想讀到webcam畫面上正確的RGB值啊!!!!
程式跑出來的錯誤結果:
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
BCB 6
有問題的code: (請善用置底文標色功能)
補充說明:
救我....超級緊急的事情,發生在我這個才用BCB一個月的初學者身上
再搞不定,我就要被困在大陸回不去了 >"<
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.130.244.127
1F:推 VictorTom:你怎麼判斷抓到的RGB值是錯的, 而不是你解讀抓到資料的 12/10 22:12
2F:→ VictorTom:方式搞錯了?_? 12/10 22:12
3F:→ buliQ:我把程式寫成可以load BMP檔,或是webcam, 兩者都是放在image 12/10 22:17
4F:→ buliQ:load BMP檔時讀到的數值就是正確的 12/10 22:18
5F:→ buliQ:而且我有加入 PixelFormat=pf24bit 12/10 22:18
6F:→ buliQ:請問抓到資料的方式有什麼錯誤的可能呢? 12/10 22:19
7F:→ wa120:加入PixelFormat=pf24bit還是有錯嗎?? 12/10 22:22
8F:→ wa120:32bits有可能是RGBA的格式,取前三個就不會錯了 12/10 22:23
9F:→ buliQ:BBMP = Image1->Picture->Bitmap; 12/10 22:26
10F:→ buliQ:BBMP->PixelFormat=pf24bit; 12/10 22:26
11F:→ buliQ:GrayPtr=(Byte*) BBMP->ScanLine[y]; 12/10 22:27
12F:→ buliQ:分別用GrayPtr[x*3] [x*3+1] [x*3+2] 取BGR值 12/10 22:28
13F:→ buliQ:我是用這樣的寫法,但是錯了 >"< 12/10 22:28
14F:推 VictorTom:不要改pixelformat, 把32bits的圖四個channel都抓出來的 12/10 23:17
15F:→ VictorTom:話, 這樣子能不能找到三個正確的channel?? 12/10 23:18
16F:→ buliQ:已經解決囉~感謝兩位幫忙 ^^ 12/11 18:36
17F:推 VictorTom:有點好奇最後到底是什麼問題....@_@" 12/11 19:19