如何將Image的影像顯示在 Panel上面 |
尚未結案
|
lixdon
一般會員 發表:13 回覆:10 積分:4 註冊:2004-03-13 發送簡訊給我 |
各位大大:
我寫了一個程式,在Panel和Image上顯示影像,並在圖像上畫線,框框。
現在的情況是抓取CCD並顯示影像正常,但Image一直被Panel擋住,Image上畫的線當然也無法顯示了,爲此,我加了Panel1->DoubleBuffered =true;但程式一運行,Panel上的圖像就顯示出來了,不是想象中的效果(不直接顯示在Panel上,由Bitmap貼到Image1中,劃線方便。),
Image1->Picture->Bitmap->LoadFromClipboardFormat
HDC hDC=GetDC(Panel1->Handle);
以上2種方法都試了,Image1都是被蓋住,如何解決呢?
void __fastcall TForm1::FormCreate(TObject *Sender)
{ Video1 = capCreateCaptureWindow("Capture Window",
WS_CHILD|WS_VISIBLE,
0,0,640,480,
Form1->Panel1->Handle ,
0); //1
capDriverConnect(Video1,0);
//get CCD capblility,such as fHasOverlay...
capDriverGetCaps(Video1,&CapDrvCaps,sizeof(CAPDRIVERCAPS));
}
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
lixdon您好:
提醒您,PO程式碼的方式請參考版規說明
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47262 針對您的問題,您可以參考下面連結的討論文章
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41192 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
lixdon
一般會員 發表:13 回覆:10 積分:4 註冊:2004-03-13 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
您好:
小弟不知道正確的做法,但下面的方法是可行的
Video1 = capCreateCaptureWindow("Capture Window", WS_CHILD|WS_VISIBLE,0,0,1,1,Panel1->Handle ,0); 然後TImage讀取剪貼簿上的影像資料,就可以在Image上畫線畫框,且不會被capCreateCaptureWindow所顯示的畫面給蓋掉(因為大小變成1Pixel大)順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> |
lixdon
一般會員 發表:13 回覆:10 積分:4 註冊:2004-03-13 發送簡訊給我 |
引言: 您好: 小弟不知道正確的做法,但下面的方法是可行的taishyang您好: 您的方法我試過了,可以將圖像顯示出來。感謝。 另外:我在參考SDL和您的有關Callbackonframe的程式時,用capSetCallbackOnFrame方法RUN出來的結果不是預期的,不能將圖像顯示出來(Image1全部是白色),但我在程式中畫的線可以顯示,我把程式PO上,Video1 = capCreateCaptureWindow("Capture Window", WS_CHILD|WS_VISIBLE,0,0,1,1,Panel1->Handle ,0); 然後TImage讀取剪貼簿上的影像資料,就可以在Image上畫線畫框,且不會被capCreateCaptureWindow所顯示的畫面給蓋掉(因為大小變成1Pixel大) //先宣告 LPVIDEOHDR VideoStr; LRESULT CALLBACK FrameCallBack1(HWND hWnd,Longint lpvhdr); //一個BUTTON void __fastcall TForm1::Button2Click(TObject *Sender) { // Form1->DoubleBuffered = true; //don't show on windows,show on bitmap capSetCallbackOnFrame(Video1,&FrameCallBack1); //隨意畫一條線 Image1->Canvas->MoveTo(70,70) ; Image1->Canvas->Pen->Color=clGreen; Image1->Canvas->LineTo(450,460); } //FrameCallBack1的內容,完全是帖子上的 LRESULT CALLBACK FrameCallBack1(HWND hWnd,Longint lpvhdr) { static BITMAPINFOHEADER BitmapHead; static BITMAPINFO BitmapInfo; static BITMAPFILEHEADER BitmapFileHead; CAPSTATUS status; int BIHsize; Byte *ptr; TMemoryStream *stream = new TMemoryStream; // 取得圖片資料 VideoStr=LPVIDEOHDR(lpvhdr); // 取得CAP訊息 capGetStatus( Video1, &status, sizeof(status) ) ; // 取得圖片格式容量大小 BIHsize=capGetVideoFormatSize( Video1 ); // 取得圖片格式 代入 bitmapinfohead 內 capGetVideoFormat( Video1, &BitmapHead, BIHsize); // 設定 BITMAPINFO BitmapInfo.bmiHeader=BitmapHead; // 取得圖檔總容量 // stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead) BitmapHead.biSizeImage; stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead) BitmapHead.biSizeImage;//減2 // 設定 BITMAPFILEHEAD // BitmapFileHead.bfType =0x4D42;//總是 BM BitmapFileHead.bfSize=stream->Size ; // BitmapFileHead.bfReserved1=(WORD)0; // BitmapFileHead.bfReserved2=(WORD)0; //該圖檔總大小 // 偏移至image data大小 BitmapFileHead.bfOffBits=sizeof(BitmapFileHead) sizeof(BitmapHead); // 將資料存入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) ); (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 (Video1, NULL);//停止callbackonframe return(0); } |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
lixdon
一般會員 發表:13 回覆:10 積分:4 註冊:2004-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |