線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2341
推到 Plurk!
推到 Facebook!

如何使用Image Box 抓取CCD之影像

答題得分者是:taishyang
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-11 00:25:11 IP:203.203.xxx.xxx 未訂閱
小弟是BCB使用的初學者 小弟已會用BCB抓取CCD影Show在Form1中 而現在想把 Show在Form1中的影像抓取到Image Box中再作處理請問如何作 請個位大大指教
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-11 13:42:14 IP:140.135.xxx.xxx 未訂閱
residue您好:   Image Box是您自己做的元件嗎? 我在BCB5.0看不到此元件   還是BCB6.0才有的元件呢??   若您想用Image顯示ccd畫面的話,可以參考下面的連結   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30183 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-12 16:31:38 IP:203.203.xxx.xxx 未訂閱
taishyang 大大真是抱歉 小弟常用VB寫程式所以Image box是VB中的名稱小弟把他搞混了 簡單的說小弟這次的問題是想把
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-12 17:00:11 IP:140.135.xxx.xxx 未訂閱
residue您好:
引言:小弟這次的問題是想把CCD顯現在Form1的影像直接映射到Image1上好做處理而不用經過硬碟的儲存
我的經驗還不是很足夠(我很嫩的),所以我下面說的您參考看看 因為 > 我沒用過電子書,所以我提供 > <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-12 18:23:11 IP:203.203.xxx.xxx 未訂閱
感謝大大的答覆!!小弟我獲益良多 哪請問大大最後一個問題 那如用剪貼簿將如何去做?? 若想直接用Image顯示ccd畫面的話有沒有較完整的程式因為小弟是個新手 對於BCB6.0所用的元件及指令還不是很熟悉謝謝大大!!                          謝謝版大的回覆!!                                  若有叨擾之處還請版大包含!!                       residue上!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-12 19:13:18 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-13 16:29:13 IP:203.203.xxx.xxx 未訂閱
小弟我研究了很久但才疏學淺還是做不出來請版大在說清楚點 謝謝
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-13 16:40:47 IP:61.30.xxx.xxx 未訂閱
引言: 小弟我研究了很久但才疏學淺還是做不出來請版大在說清楚點 謝謝
您可以試試用TBitmap,將CCD的影像抓到TBitmap上,然後再貼到Image上
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-13 16:57:26 IP:203.203.xxx.xxx 未訂閱
那請問seeing大大 有沒有比較好的且完整的範例可供參考
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-13 17:16:30 IP:140.135.xxx.xxx 未訂閱
residue您好:
引言: 小弟我研究了很久但才疏學淺還是做不出來請版大在說清楚點 謝謝
可否將您的程式碼貼上來,好讓大家幫您看看問題在哪邊 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-13 17:31:55 IP:203.203.xxx.xxx 未訂閱
謝謝大大!!熱情回應 以下是小弟參考本站的一位大大所寫的程式 因為要做出這項程式時間有點趕 但又對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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-13 17:39:48 IP:140.135.xxx.xxx 未訂閱
residue您好:   您的專案是編譯時出問題還是執行時有問題??   錯誤訊息為何??    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-07-13 17:54:33 IP:203.203.xxx.xxx 未訂閱
其實這程式是參閱別人 所以沒啥問題 小弟只是想改成用Image顯示而已 因為小弟有許多照片處理的方法多是介由Image來顯示的 那小弟想說若CCD擷取進來的影像若 直接顯現在Image上那就可以把小弟之前的所做的在Image上的照片處理的方法給套用上 若要修改剛剛那個程式不知應從何改起?? 謝謝版大!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-07-13 18:13:29 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-07-13 18:56:04 IP:203.203.xxx.xxx 未訂閱
太好了已經可以用了!!但想弟有個疑惑那就是為何image會抖個不停還有為何time時間用的太快會當掉!! 謝謝!! 謝謝版大不辭辛勞的回答!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-07-13 19:58:24 IP:140.135.xxx.xxx 未訂閱
residue您好:  
引言:但想弟有個疑惑那就是為何image會抖個不停還有為何time時間用的太快會當掉
我不了解您所謂的抖動指的是什麼?? 我測試過並不會當掉,除非您有做其他的事情... Timer調太快,基本上是沒有用的(沒有效果).. 因為您攝影機的Frame Rate也沒有那麼快 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-07-13 20:33:52 IP:61.30.xxx.xxx 未訂閱
引言: 太好了已經可以用了!!但想弟有個疑惑那就是為何image會抖個不停還有為何time時間用的太快會當掉!! 謝謝!! 謝謝版大不辭辛勞的回答!!
我想或許可以把Timer的動作轉移至執行緒內執行,也許這樣就沒有這些問題了。(不好意思,目前沒有CCD,所以無法幫你測試,sorry)
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-07-13 21:47:03 IP:140.135.xxx.xxx 未訂閱
residue您好:  
引言:我想或許可以把Timer的動作轉移至執行緒內執行,也許這樣就沒有這些問題了
好奇想請問一下,您判斷用執行緒當作solution的依據是什麼呢??< >< > ~我也是在學習的階段,所以請您多多見諒與指教~
residue
中階會員


發表:90
回覆:153
積分:53
註冊:2003-07-02

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-07-13 23:49:03 IP:203.203.xxx.xxx 未訂閱
感謝taishyang大大以及seeing大大熱情的回應 有諸位的幫忙小弟的問題才得以解決 小弟我也會加把勁希望有一日變得和諸位一樣強!!好去幫助有困難的人 謝謝!!
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-07-14 15:47:19 IP:210.59.xxx.xxx 未訂閱
我將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

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-07-14 15:56:25 IP:140.135.xxx.xxx 未訂閱
seeing 您好:   我將您的程式用"code"與"/code"包起來(""用[]取代),方便閱讀,希望您不要介意   謝謝您的分享, 我本來的程式不會有抖動的現象...   可能是因為我的Image大小一開始就設定好了    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
seeing
初階會員


發表:49
回覆:131
積分:41
註冊:2002-11-07

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-07-14 16:10:45 IP:210.59.xxx.xxx 未訂閱
不知道taishyang板主是在跟residue說, 還是在跟我說呢?< >< >
系統時間:2024-04-29 14:57:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!