在BCB上寫自定函數 |
答題得分者是:daldal
|
AddyHsu
一般會員 發表:1 回覆:1 積分:0 註冊:2008-05-15 發送簡訊給我 |
我想寫ㄧ個利用hook function跟GrabContinuous連續抓圖的程式,
程式如下 [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; Graphics::TBitmap *photo; long xsize=640,ysize=480,data=0; MIL_ID MilApplication, /* Application identifier. */ MilSystem, /* System identifier. */ MilDisplay, /* Display identifier. */ MilDigitizer, /* Digitizer identifier. */ MilImage, /* Image buffer identifier. */ ImageBuffer[10]; typedef volatile struct { MIL_ID *MilImage; MIL_ID MilDigitizer; MIL_ID GrabEndEvent; long NbGrabStart; long NbGrabEnd; double Time; } UserDataStruct; UserDataStruct UserStruct; int picture=0; int i=0; //-------------------------------------------------------- long MFTYPE FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr) { int x,y; unsigned char buf1[480][640]; Graphics::TBitmap *photo; Byte *data; MbufGet2d(MilImage,0L,0L,640L,480L,buf1); for(y=0;y <=480;y ) {data=(Byte *)photo->ScanLine[y]; for(x=0;x<=640*3;x =3) { data[x]=buf1[y][x/3]; data[x 1]=buf1[y][x/3] ; data[x 2] =buf1[y][x/3] ; } } Image1->Picture->Assign(photo); return 0; } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //extern PACKAGE TWinControl* __fastcall FindControl(HWND Handle); //開啟HWND //Timer1->Enabled=true; Graphics::TBitmap *photo=Image1->Picture->Bitmap; photo->PixelFormat=pf24bit; /* Allocate defaults.連線配置區 */ MappAlloc(M_SETUP,&MilApplication); MsysAlloc(M_SYSTEM_CRONOSPLUS,M_DEFAULT,M_DEFAULT,&MilSystem); MdigAlloc(MilSystem,M_DEFAULT,"Rs170.DCF",M_DEFAULT,&MilDigitizer); MdispAlloc(MilSystem,M_DEFAULT,"M_DEFAULT",M_DEFAULT,&MilDisplay); MbufAlloc2d(MilSystem,xsize,ysize,8 M_UNSIGNED,M_IMAGE M_DISP M_GRAB M_PROC,&MilImage); /*for(i=0;i>9;i ) {MbufAlloc2d(MilSystem,xsize,ysize,8 M_UNSIGNED,M_IMAGE M_DISP M_GRAB M_PROC,&MilImage); }*/ MdigHookFunction(MilDigitizer,M_GRAB_FRAME_END,FrameOneGrabEnd,(void *)(&UserStruct)); //MdispSelectWindow(MilDisplay,MilImage,Handle); //選擇HANDLE開啟錄影 //MdispSelect(MilDisplay,MilImage); //MdigGrab(MilDigitizer, MilImage); //拍照 放入MilImage MdigGrabContinuous(MilDigitizer, MilImage); /*攝影*/ } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //Timer1->Enabled=false; //清除影像配置 MappFreeDefault(MilApplication, MilSystem, MilDisplay,MilDigitizer, MilImage); MdigHookFunction(MilDigitizer, M_GRAB_FRAME_END M_UNHOOK, FrameOneGrabEnd, (void *)(&UserStruct)); } //--------------------------------------------------------------------------- [/code] 但在compile時會顯示下面錯誤: [C Error] Unit1.cpp(50): E2451 Undefined symbol 'Image1' 錯誤發生在FrameOneGrabEnd 這個函式裡面。 是因為在我自己寫的function裡面不能用Object嗎? 請各位大大幫幫忙....感謝<(_ _)> 編輯記錄
AddyHsu 重新編輯於 2008-05-15 19:50:38, 註解 無‧
|
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
因為 FrameOneGrabEnd 的 Function 不是屬於 Form1
所以不能直接存取Image1 方法一: 把 Image1->Picture->Assign(photo); 改成 Form1->Image1->Picture->Assign(photo); 讓程式知道你要存取Form1的Image1元件 方法二: 把 Function 加入 Form1 .h 中 [code cpp] long MFTYPE FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr); 移到Form1的Public Class裡面,並且改成 long MFTYPE __fastcall FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr); [/code] .cpp 中 [code cpp] long MFTYPE FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr) 改成 long MFTYPE __fastcall Form1::FrameOneGrabEnd(long HookType, MIL_ID EventId, void MPTYPE *UserStructPtr) [/code] |
AddyHsu
一般會員 發表:1 回覆:1 積分:0 註冊:2008-05-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |