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

在BCB上寫自定函數

答題得分者是:daldal
AddyHsu
一般會員


發表:1
回覆:1
積分:0
註冊:2008-05-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-15 19:48:28 IP:140.115.xxx.xxx 訂閱
我想寫ㄧ個利用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-16 09:03:28 IP:220.130.xxx.xxx 未訂閱
因為 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]
編輯記錄
daldal 重新編輯於 2008-05-16 09:06:56, 註解 程式碼編排‧
daldal 重新編輯於 2008-05-16 09:08:53, 註解 無‧
AddyHsu
一般會員


發表:1
回覆:1
積分:0
註冊:2008-05-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-19 18:29:17 IP:140.115.xxx.xxx 訂閱
我用方法一解決了,
原來只是個基本的問題...
非常謝謝daldal大大的回答!!
系統時間:2024-04-25 22:59:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!