residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
小弟是BCB使用的初學者 小弟已會用BCB抓取CCD影Show在Form1中 而現在想把
Show在Form1中的影像抓取到Image Box中再作處理請問如何作 請個位大大指教
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
taishyang 大大真是抱歉 小弟常用VB寫程式所以Image box是VB中的名稱小弟把他搞混了 簡單的說小弟這次的問題是想把
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
引言:小弟這次的問題是想把CCD顯現在Form1的影像直接映射到Image1上好做處理而不用經過硬碟的儲存
我的經驗還不是很足夠(我很嫩的),所以我下面說的您參考看看
因為 >
我沒用過電子書,所以我提供 > <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 -
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
感謝大大的答覆!!小弟我獲益良多 哪請問大大最後一個問題 那如用剪貼簿將如何去做?? 若想直接用Image顯示ccd畫面的話有沒有較完整的程式因為小弟是個新手 對於BCB6.0所用的元件及指令還不是很熟悉謝謝大大!! 謝謝版大的回覆!!
若有叨擾之處還請版大包含!! residue上!!
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
你可以再參考下面的連結
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33535
並改成
#include
capGrabFrameNoStop(hCapWnd);
capEditCopy(hCapWnd);
if(Clipboard()->HasFormat(CF_DIB))
{
Image1->Picture->Bitmap->Assign(Clipboard());
}
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
小弟我研究了很久但才疏學淺還是做不出來請版大在說清楚點
謝謝
|
seeing
初階會員
發表:49 回覆:131 積分:41 註冊:2002-11-07
發送簡訊給我
|
引言:
小弟我研究了很久但才疏學淺還是做不出來請版大在說清楚點
謝謝
您可以試試用TBitmap,將CCD的影像抓到TBitmap上,然後再貼到Image上
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
那請問seeing大大 有沒有比較好的且完整的範例可供參考
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
引言:
小弟我研究了很久但才疏學淺還是做不出來請版大在說清楚點
謝謝
可否將您的程式碼貼上來,好讓大家幫您看看問題在哪邊 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
謝謝大大!!熱情回應 以下是小弟參考本站的一位大大所寫的程式 因為要做出這項程式時間有點趕 但又對BCB不太熟(上手一星期)所以抄襲之嫌還請見諒!!
以下就是主程式 __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
int Catch;
TMenuItem *NI; Timer1->Enabled = false;
Cap = new TCap (Handle); Cap->EnumCapDrv (); for (Catch=0; CatchpStringCapDrivers->Count; Catch ) {
NI = new TMenuItem(Options1);
NI->Caption = Cap->pStringCapDrivers->Strings[Catch];
NI->Tag = Catch;
NI->Checked = Catch==0 ? true:false;
NI->OnClick = MyMenyClick;
Options1->Add (NI);
}
if (Catch > 0 )
Cap->Connect (0); //if(Clipboard()->HasFormat(CF_DIB))
//{
//Image1->Picture->Bitmap->Assign(Clipboard());
//} }
//---------------------------------------------------------------------------
void __fastcall TForm1::MyMenyClick(TObject *Sender)
{
int Catch;
TMenuItem *MenuItem; MenuItem = reinterpret_cast (Sender); if (MenuItem) {
// ---- Disable rest og checked menu
for (Catch=0; CatchCount; Catch ) {
Options1->Items[Catch]->Checked = false;
}
MenuItem->Checked = true;
Cap->Connect (MenuItem->Tag);
}
}
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
您的專案是編譯時出問題還是執行時有問題??
錯誤訊息為何?? 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
其實這程式是參閱別人 所以沒啥問題 小弟只是想改成用Image顯示而已 因為小弟有許多照片處理的方法多是介由Image來顯示的 那小弟想說若CCD擷取進來的影像若 直接顯現在Image上那就可以把小弟之前的所做的在Image上的照片處理的方法給套用上 若要修改剛剛那個程式不知應從何改起?? 謝謝版大!!
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
參考下面程式吧,在BCB5.0 WinXp驗證過可以執行
#include
#include
HWND vcHWND;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender)
{
vcHWND = capCreateCaptureWindow ( "Capture Window",
WS_CHILD | WS_VISIBLE ,0,0,1,1,Form1->Handle, 0); //設定視窗大小
bool a = false;
for( int i = 0; i < 10; i )
{
a = capDriverConnect( vcHWND, i );
if( a ) break;
}
if( !a )
{
ShowMessage("攝影機連接失敗..");
}
capPreviewRate(vcHWND,33);
capPreview(vcHWND,true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
capGrabFrameNoStop(vcHWND);
capEditCopy(vcHWND);
if(Clipboard()->HasFormat(CF_DIB))
{
Image1->Picture->Bitmap->Assign(Clipboard());
}
}
//---------------------------------------------------------------------------
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
太好了已經可以用了!!但想弟有個疑惑那就是為何image會抖個不停還有為何time時間用的太快會當掉!!
謝謝!!
謝謝版大不辭辛勞的回答!!
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
引言:但想弟有個疑惑那就是為何image會抖個不停還有為何time時間用的太快會當掉
我不了解您所謂的抖動指的是什麼??
我測試過並不會當掉,除非您有做其他的事情...
Timer調太快,基本上是沒有用的(沒有效果)..
因為您攝影機的Frame Rate也沒有那麼快 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 -
|
seeing
初階會員
發表:49 回覆:131 積分:41 註冊:2002-11-07
發送簡訊給我
|
引言:
太好了已經可以用了!!但想弟有個疑惑那就是為何image會抖個不停還有為何time時間用的太快會當掉!!
謝謝!!
謝謝版大不辭辛勞的回答!!
我想或許可以把Timer的動作轉移至執行緒內執行,也許這樣就沒有這些問題了。(不好意思,目前沒有CCD,所以無法幫你測試,sorry)
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
引言:我想或許可以把Timer的動作轉移至執行緒內執行,也許這樣就沒有這些問題了 好奇想請問一下,您判斷用執行緒當作solution的依據是什麼呢??< >< > ~我也是在學習的階段,所以請您多多見諒與指教~
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
感謝taishyang大大以及seeing大大熱情的回應 有諸位的幫忙小弟的問題才得以解決 小弟我也會加把勁希望有一日變得和諸位一樣強!!好去幫助有困難的人 謝謝!!
|
seeing
初階會員
發表:49 回覆:131 積分:41 註冊:2002-11-07
發送簡訊給我
|
我將taishyang板主您的程式run了之後,果然residue 所言, Image會抖動
這是修改自板主您的版本, 去除Timer, 加入一個Button
//--------------------------------------------------------------------------- #include
#pragma hdrstop
#include
#include
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1; HWND vcHWND;
BOOL work=0;
DWORD TID;
HANDLE THANDLE; DWORD CALLBACK ReceiveImage(void* p)
{
while(work)
{
capGrabFrameNoStop(vcHWND);
capEditCopy(vcHWND);
if(Clipboard()->HasFormat(CF_DIB))
Form1->Image1->Picture->Assign(Clipboard());
}
return 0;
} //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender)
{
vcHWND = capCreateCaptureWindow ( "Capture Window",
WS_CHILD | WS_VISIBLE ,0,0,1,1,Form1->Handle, 0); //設定視窗大小
bool a = false;
for( int i = 0; i < 10; i )
{
a = capDriverConnect( vcHWND, i );
if( a )
break;
} if( !a )
ShowMessage("攝影機連接失敗..");
capPreviewRate(vcHWND,33);
capPreview(vcHWND,true);
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
work=1;
if(THANDLE)
ResumeThread(THANDLE);
else
THANDLE=CreateThread(0,0,ReceiveImage,0,0,&TID); if(THANDLE==0)
ShowMessage("No Thread");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
try
{
work=0;
SuspendThread(THANDLE);
CloseHandle(THANDLE);
Clipboard()->Clear();
}
catch(...)
{}
}
//--------------------------------------------------------------------------- P.S.Image的大小為640x480
P.S.要將Image的Stretch設為true,這樣就不會抖動了 taishyang板主請您測試一下吧!希望沒有問題 發表人 - seeing 於 2003/07/14 16:08:38
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
seeing 您好:
我將您的程式用"code"與"/code"包起來(""用[]取代),方便閱讀,希望您不要介意
謝謝您的分享, 我本來的程式不會有抖動的現象...
可能是因為我的Image大小一開始就設定好了 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 -
|
seeing
初階會員
發表:49 回覆:131 積分:41 註冊:2002-11-07
發送簡訊給我
|
不知道taishyang板主是在跟residue說, 還是在跟我說呢?< >< >
|