CCD API 函數使用問題! |
答題得分者是:SDL
|
CMOS
一般會員 發表:1 回覆:7 積分:1 註冊:2002-10-22 發送簡訊給我 |
|
SDL
一般會員 發表:2 回覆:6 積分:6 註冊:2002-10-26 發送簡訊給我 |
前面的connect部分不再敘述 先宣告
LPVIDEOHDR VideoStr; //用一個 button元件內容如下,設定callbackonframe啟動
void __fastcall TForm1::Button5Click(TObject *Sender)
{
capSetCallbackOnFrame (ghCapWnd, &FrameCallBack);
} //建立callbackonframe函式,底下為未經壓縮模式24bit沒有調色盤資料
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( ghCapWnd, &status, sizeof(status) ) ;
// 取得圖片格式容量大小
BIHsize=capGetVideoFormatSize( ghCapWnd );
// 取得圖片格式 代入 bitmapinfohead 內
capGetVideoFormat( ghCapWnd, &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) );
(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 (ghCapWnd, NULL); //停止callbackonframe
return(0);
}
|
CMOS
一般會員 發表:1 回覆:7 積分:1 註冊:2002-10-22 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
74205
一般會員 發表:8 回覆:16 積分:4 註冊:2002-10-23 發送簡訊給我 |
|
SDL
一般會員 發表:2 回覆:6 積分:6 註冊:2002-10-26 發送簡訊給我 |
[quote]
不好意思
能不能說的再詳細一點
我按照內容編譯後會有出現下面的錯誤訊息
[C++ Error] ccdtest.cpp(75): E2451 Undefined symbol 'FrameCallBack'
我之前是用Timer和Image元件配合,但速度並不理想
不好意思麻煩您了 你沒宣告你下這行(放在include底下)
LRESULT CALLBACK FrameCallBack( HWND, Longint ); 在執行時
Form1->Image1->Picture->Bitmap->LoadFromStream( stream );
會出錯,說write有問題 可能是你的stream->size有問題
|
SDL
一般會員 發表:2 回覆:6 積分:6 註冊:2002-10-26 發送簡訊給我 |
引言: LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) 哇!!!真是高手 又快又方便 可否請教一下這是什麼寫作方法 我沒一個字看得懂也 謝謝你的回應capSetCallbackOnFrame 是 vfw.h 內的東東,當有圖片時呼叫所設定的函式 原型如下定義 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) hwnd 指向您的capCreateCaptureWindow, fpProc指向FrameCallBack 這只一小程式,是為了建立人員資料庫時使用ccd抓取人員照片用並存入blob內 事實上這種方式很基礎,為了存入資料庫時檔案太大問題我改用現成元件開發 既方便又可壓縮(jpg, tiff, bmp........)又可以從dbimage秀出各種格式圖檔 |
74205
一般會員 發表:8 回覆:16 積分:4 註冊:2002-10-23 發送簡訊給我 |
|
CMOS
一般會員 發表:1 回覆:7 積分:1 註冊:2002-10-22 發送簡訊給我 |
|
74205
一般會員 發表:8 回覆:16 積分:4 註冊:2002-10-23 發送簡訊給我 |
引言: capSetCallbackOnFrame 是 vfw.h 內的東東,當有圖片時呼叫所設定的函式 原型如下定義 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) hwnd 指向您的capCreateCaptureWindow, fpProc指向FrameCallBack 這只一小程式,是為了建立人員資料庫時使用ccd抓取人員照片用並存入blob內 事實上這種方式很基礎,為了存入資料庫時檔案太大問題我改用現成元件開發 既方便又可壓縮(jpg, tiff, bmp........)又可以從dbimage秀出各種格式圖檔我問一個問題 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) lpvhdr這個 是從哪裡傳來數值 |
browningchi
一般會員 發表:4 回覆:3 積分:1 註冊:2002-11-28 發送簡訊給我 |
引言:引言: capSetCallbackOnFrame 是 vfw.h 內的東東,當有圖片時呼叫所設定的函式 原型如下定義 #define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) hwnd 指向您的capCreateCaptureWindow, fpProc指向FrameCallBack 這只一小程式,是為了建立人員資料庫時使用ccd抓取人員照片用並存入blob內 事實上這種方式很基礎,為了存入資料庫時檔案太大問題我改用現成元件開發 既方便又可壓縮(jpg, tiff, bmp........)又可以從dbimage秀出各種格式圖檔我問一個問題 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) lpvhdr這個 是從哪裡傳來數值 出現錯誤訊息說 [C Error] Unit1.cpp(93): E2031 Cannot cast from 'long (__stdcall * (_closure )(void *,videohdr_tag *))(void *,videohdr_tag *)' to 'void *' |
kenano
一般會員 發表:6 回覆:5 積分:2 註冊:2002-11-25 發送簡訊給我 |
|
robert1014
初階會員 發表:34 回覆:85 積分:43 註冊:2002-03-13 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Kenano你好:
通常攝影機用的感光元件可分CCD和CMOS sensor
看產品的走向而選擇用哪種..
像web camera解析度不用太高,用的就是像素較低的感光元件
CCD或CMOS都有人用...
而高解析度(超過640*480)的攝影機或像機用的就是CCD了..
CMOS sensor的解析度大部分都是在VGA大小(640*480)
web camera大都是USB介面,監視器材的CCD攝影機都是用影像擷取卡..
但最後都是連到電腦上...當使用#include < vfw.h > 電腦都會接收到
影像視訊流...所以只要是連到電腦的攝影機都可以用之前所討論的方式
秀出來...
|
Sticker
一般會員 發表:1 回覆:7 積分:1 註冊:2003-05-28 發送簡訊給我 |
|
Sticker
一般會員 發表:1 回覆:7 積分:1 註冊:2003-05-28 發送簡訊給我 |
|
hinatalin
一般會員 發表:3 回覆:3 積分:1 註冊:2003-05-15 發送簡訊給我 |
引言:引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 >>< face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子我用savedib()跟sdl大所提的方式一起做,得到了兩張圖檔 發現真的是BitmapFileHead的問題,而且不只是sizeof()有問題 連BitmapFileHead的內容也有問題,如果是整個BitmapFileHead整個輸出的話 會得到42 4D 00 00 XX XX XX XX(00 00後面接的是圖檔大小) 正確是42 4D XX XX XX XX(沒有00 00 而且大小會少2) 我把程式碼改成這樣就正常了: ....(以上略) stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead)-2 BitmapHead.biSizeImage;//減2 // 設定 BITMAPFILEHEAD BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfReserved1=(WORD)0; BitmapFileHead.bfReserved2=(WORD)0; BitmapFileHead.bfOffBits=sizeof(BitmapFileHead)-2 sizeof(BitmapHead); // 偏移至imagedata大小//減2 // 將資料存入 memorystream stream->Position=0; stream->WriteBuffer( &BitmapFileHead.bfType, sizeof(BitmapFileHead.bfType) ); stream->WriteBuffer( &BitmapFileHead.bfSize, sizeof(BitmapFileHead.bfSize) ); 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) ); ....(以下略) 真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22 |
mkchuang
一般會員 發表:1 回覆:10 積分:7 註冊:2002-12-18 發送簡訊給我 |
引言:引言:那是BCB6的問題... 你更新一下BCB6就可以解決了...引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 >>< face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22 |
hinatalin
一般會員 發表:3 回覆:3 積分:1 註冊:2003-05-15 發送簡訊給我 |
引言:引言:哈哈,正想上來po,結果被搶先一步了 >o< 沒錯,更新以後就沒問題了 ~~引言:那是BCB6的問題... 你更新一下BCB6就可以解決了...引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 >>< face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22 |
marky1
一般會員 發表:17 回覆:29 積分:9 註冊:2003-03-19 發送簡訊給我 |
您好:
小弟使用SDL的方法後,於 capSetCallbackOnFrame(hCapWnd, &FrameCallBack); 這一行出現以下錯誤訊息:
[C Error] Unit1.cpp(104): E2031 Cannot cast from 'long (__stdcall * (_closure )(void *,long))(void *,long)' to 'void *' 請問一下:
1. &FrameCallBack的寫法正確嗎?傳入會不會不完整呢?
2. 我不清楚LRESULT CALLBACK FrameCallBack(HWND hwnd, Longint lpvhdr) 中的lpvhdr是什麼?要傳入什麼樣的參數至FrameCallBack? 感激不盡!!
|
marky1
一般會員 發表:17 回覆:29 積分:9 註冊:2003-03-19 發送簡訊給我 |
|
shinnuei
一般會員 發表:32 回覆:48 積分:21 註冊:2002-03-13 發送簡訊給我 |
請問要更新到那一版呢?小弟抓了這個bcb6_eng_ent_upd4.exe,應該是 update pack 4,可是裝了還是會出現同樣的問題耶?
另外我用 hinatalin 的方式,因為我把影像抓到 Image 上面看,結果卻是一條一條的,
所以這一行後面加了一個存檔的程式碼,把圖貼上來給大家看一下.
Form1->Image1->Picture->Bitmap->LoadFromStream( stream );
Form1->Image1->Picture->SaveToFile("c:\\test.bmp");
|
JK2050
一般會員 發表:5 回覆:5 積分:2 註冊:2005-03-12 發送簡訊給我 |
|
dac
一般會員 發表:14 回覆:24 積分:7 註冊:2005-01-06 發送簡訊給我 |
不好意思,請問一下要如何做像您這樣的判斷
引言:引言:引言: 在執行時 Form1->Image1->Picture->Bitmap->LoadFromStream( stream ); 會出錯,說write有問題 可能是你的stream->size有問題 >>< face="Verdana, Arial, Helvetica"> 好像是sizeof(BitmapFileHead)的地方會出錯 是BCB6的問題的樣子我用savedib()跟sdl大所提的方式一起做,得到了兩張圖檔 發現真的是BitmapFileHead的問題,而且不只是sizeof()有問題 連BitmapFileHead的內容也有問題,如果是整個BitmapFileHead整個輸出的話 會得到42 4D 00 00 XX XX XX XX(00 00後面接的是圖檔大小) 正確是42 4D XX XX XX XX(沒有00 00 而且大小會少2) 我把程式碼改成這樣就正常了: ....(以上略) stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead)-2 BitmapHead.biSizeImage;//減2 // 設定 BITMAPFILEHEAD BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfReserved1=(WORD)0; BitmapFileHead.bfReserved2=(WORD)0; BitmapFileHead.bfOffBits=sizeof(BitmapFileHead)-2 sizeof(BitmapHead); // 偏移至imagedata大小//減2 // 將資料存入 memorystream stream->Position=0; stream->WriteBuffer( &BitmapFileHead.bfType, sizeof(BitmapFileHead.bfType) ); stream->WriteBuffer( &BitmapFileHead.bfSize, sizeof(BitmapFileHead.bfSize) ); 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) ); ....(以下略) 真奇怪,明明就是同樣的東西阿,分開輸出就正確了,用struct直接輸出就錯了,我用的是WINXP BCB6(沒有上過patch),請問有方法解決嗎 ^^? 發表人 - hinatalin 於 2003/06/10 01:35:22 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |