使用bcb控制ccd後要貼到image物件上如何改變大小 |
|
dragonhippop
一般會員 發表:5 回覆:0 積分:1 註冊:2004-12-26 發送簡訊給我 |
各位大大好:
小弟利用bcb將ccd的資料抓出來後貼到image物件上面顯示,如果將影像寬度設成320*240時是ok的,可是如果將它改成640*480就會發生錯誤,程式片段如下:請問各位大大要如何解決呢?因為我想要顯示640*480的畫面 請各位大大指教一下~謝謝 [code] #define ImageWidth 320 #define ImageHeight 240 HWND hCapWnd; LRESULT CALLBACK FrameCallBack( HWND, Longint); LPVIDEOHDR VideoStr; unsigned char *CcdBuffer=new unsigned char[ImageWidth*ImageHeight*3]; unsigned char *GrayBuffer=new unsigned char[ImageWidth*ImageHeight]; void __fastcall TForm1::Button1Click(TObject *Sender) { //hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, ImageWidth, ImageHeight,Panel1->Handle, 0 ); hCapWnd = capCreateCaptureWindow("Capture Window", WS_CHILD | WS_VISIBLE, 0, 0, 1, 1, Panel1->Handle, 0); bool a = false; for( int i = 0; i < 10; i ) { a = capDriverConnect( hCapWnd, i ); if( a ) break; } if( !a ) { ShowMessage("攝影機連接失敗.."); } capOverlay(hCapWnd, true); capPreview(hCapWnd,true); capPreviewScale(hCapWnd,true); capPreviewRate(hCapWnd, 1000/30); //capDlgVideoFormat(hCapWnd); Timer1->Enabled =true; } //--------------------------------------------------------------------------- LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) { VideoStr=LPVIDEOHDR(lpvhdr); memcpy(CcdBuffer,VideoStr->lpData,ImageWidth*ImageHeight*3); /////改成640*480時此行會反籃色然後出現錯誤訊息 capSetCallbackOnFrame (hCapWnd, NULL); //停止callbackonframe return(0); } void __fastcall TForm1::Timer1Timer(TObject *Sender) { capSetCallbackOnFrame (hCapWnd, &FrameCallBack); //呼叫api來取得目前影像 for (int i=0;i for (int j=0;j int R,G,B; R=i*ImageWidth*3 j*3; G=i*ImageWidth*3 j*3 1; B=i*ImageWidth*3 j*3 2; GrayBuffer[i*ImageWidth j]=(CcdBuffer[R]*0.299 CcdBuffer[G]*0.587 CcdBuffer[B]*0.114); } } Byte *ptr2; int x,y; Graphics::TBitmap *Bitmap1; Bitmap1=new Graphics::TBitmap; Bitmap1=Image1->Picture->Bitmap ; Bitmap1->PixelFormat=pf24bit; for ( y = 0; y < ImageHeight; y ) { ptr2 = (Byte *)Bitmap1->ScanLine[y]; for ( x = 0; x < ImageWidth; x ) { ptr2[x*3]=GrayBuffer[((ImageHeight-1-y)*ImageWidth) (x)]; ptr2[x*3 1]=ptr2[x*3]; ptr2[x*3 2]=ptr2[x*3]; } } Bitmap1->Assign(Bitmap1); } } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |