影像擷取 使用 FrameCallBack 時出現 bitmap image is not valid 問題 |
答題得分者是:chengsean
|
ALTIS
初階會員 發表:4 回覆:26 積分:31 註冊:2005-04-28 發送簡訊給我 |
在我的開發電腦上Run都OK(不會出現任何問題 , 功能也都正確) , 原本想說完成了
但天不從人願 .... 換一台PC , Capture 時卻出現「bitmap image is not valid」的錯誤訊息 會不會是 vfw 還需要安裝什麼驅動 或 bitmap format 需要安裝呢 真搞不懂.... 麻煩各位大大囉 以下是我的 FrameCallBack 程式 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ){ static BITMAPINFOHEADER BitmapHead; static BITMAPINFO BitmapInfo; static BITMAPFILEHEADER BitmapFileHead; CAPSTATUS status; int BIHsize, byte; Byte *ptr; TMemoryStream *stream = new TMemoryStream; VideoStr=LPVIDEOHDR(lpvhdr); capGetStatus( hwnd, &status, sizeof(status) ) ; BIHsize=capGetVideoFormatSize( hwnd); capGetVideoFormat( hwnd, &BitmapHead, BIHsize); BitmapInfo.bmiHeader=BitmapHead; stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead) BitmapHead.biSizeImage; BitmapFileHead.bfType=0x4D42; BitmapFileHead.bfSize=stream->Size; BitmapFileHead.bfOffBits=sizeof(BitmapFileHead) sizeof(BitmapHead); stream->Position=0; stream->WriteBuffer( &BitmapFileHead, sizeof(BitmapFileHead) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); (void*)ptr=stream->Memory; ptr = BitmapFileHead.bfOffBits; Move( VideoStr->lpData, ptr, BitmapHead.biSizeImage); stream->Position=0; bmp_temp->LoadFromStream( stream ); //jp->Assign(bmp_temp); delete( stream ); capSetCallbackOnFrame (hwnd, NULL); return(0); }
------
城市讓人迷惘 我在湖岸看見希望 妳的眼神是一道光芒 開啟我心中的收藏 |
triop
一般會員 發表:14 回覆:15 積分:5 註冊:2005-11-08 發送簡訊給我 |
|
ALTIS
初階會員 發表:4 回覆:26 積分:31 註冊:2005-04-28 發送簡訊給我 |
|
chengsean
一般會員 發表:0 回覆:1 積分:5 註冊:2007-05-21 發送簡訊給我 |
|
ALTIS
初階會員 發表:4 回覆:26 積分:31 註冊:2005-04-28 發送簡訊給我 |
|
ALTIS
初階會員 發表:4 回覆:26 積分:31 註冊:2005-04-28 發送簡訊給我 |
===================引 用 chengsean 文 章=================== 1. 你可以先確定一下你的USB是不是1.1.. 只要用MSN的camear設定,看看你的format是不是可以 選YUY2的格式,或是只能出現MJPEG.. 如果是只有MJPEG,那麼你的bitstream就是JPEG的格式, 對於Bitmap當然是不合,我之前也遇過這種情況,我有試著 把data輸出去看,果然是JPEG的格式. 確實是影像格式的問題 我直接在擷取卡的影像格式作設定 改成RGB格式就沒問題了.... 小小的一個動作,卻花了很長的時間尋找 這就是 Programer 的悲哀
------
城市讓人迷惘 我在湖岸看見希望 妳的眼神是一道光芒 開啟我心中的收藏 |
fusung
中階會員 發表:26 回覆:169 積分:99 註冊:2003-11-25 發送簡訊給我 |
沒錯,工程師必經之路的確是這樣坎坷。 不過往好的方向想,當你把一些不可能的答案都探索過, 以後遇到類似或是延伸的問題,就可以大大縮短搜尋時間, 因為不可能的答案你大概都走過了! ===================引 用 ALTIS 文 章=================== 確實是影像格式的問題 我直接在擷取卡的影像格式作設定 改成RGB格式就沒問題了.... 小小的一個動作,卻花了很長的時間尋找 這就是 Programer 的悲哀
------
The first step toward proving things for yourself is to understand how others have done it before! |
Marcise
一般會員 發表:4 回覆:5 積分:1 註冊:2006-10-25 發送簡訊給我 |
小弟也有一隻webcam
YUY2的影像格式 但是也是不能使用FrameCallBack 會出現跟原po一樣的錯誤 是YUY2本來就不能使用嗎 還是程式碼需要做一些修正? 以下是參考版上大大的程式碼: <textarea cols="60" rows="10" class="cpp" name="code"> LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) { static BITMAPINFOHEADER BitmapHead; static BITMAPINFO BitmapInfo; static BITMAPFILEHEADER BitmapFileHead; CAPSTATUS status; int BIHsize, byte; Byte *ptr; TMemoryStream *stream = new TMemoryStream; // 取得圖片資料 VideoStr=LPVIDEOHDR(lpvhdr); // 取得CAP訊息 capGetStatus( vc1, &status, sizeof(status) ) ; // 取得圖片格式容量大小 BIHsize=capGetVideoFormatSize( vc1 ); // 取得圖片格式 代入 bitmapinfohead 內 capGetVideoFormat( vc1, &BitmapHead, BIHsize); // 設定 BITMAPINFO BitmapInfo.bmiHeader=BitmapHead; // 取得圖檔總容量 stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead) BitmapHead.biSizeImage; // 設定 BITMAPFILEHEAD BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfOffBits=sizeof(BitmapFileHead) sizeof(BitmapHead); // 偏移至imagedata大小 // 將資料存入 memorystream stream->Position=0; stream->WriteBuffer( &BitmapFileHead, sizeof(BitmapFileHead) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); stream->WriteBuffer( &BitmapFileHead.bfReserved1, sizeof(BitmapFileHead.bfReserved1) ); stream->WriteBuffer( &BitmapFileHead.bfReserved2, sizeof(BitmapFileHead.bfReserved2) ); stream->WriteBuffer( &BitmapFileHead.bfOffBits, sizeof(BitmapFileHead.bfOffBits) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); (void*)ptr=stream->Memory; ptr = BitmapFileHead.bfOffBits; Move( VideoStr->lpData, ptr, BitmapHead.biSizeImage); // 存入完成 stream->Position=0; // Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); delete( stream ); capSetCallbackOnFrame (vc1, NULL); //停止callbackonframe return(0); } </textarea> |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |