作者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