要將ccd影像copy到image上顯示的問題 |
尚未結案
|
dragonhippopdc
一般會員 發表:45 回覆:51 積分:19 註冊:2005-01-15 發送簡訊給我 |
[bcb]
各位大大能幫我找找我的錯誤嗎
我本來解析度設在320*240於image上顯示時都ok沒問題~以下是我的code
它是在memcpy(CcdBuffer,VideoStr->lpData,ImageWidth*ImageHeight*3);這一行出現反藍的不知是不是這邊錯可是在320*240時放到image上顯示都沒問題的~我的CCD確定支援到640*480的~我先將ccd影像直接顯示在panel這個元件上是ok的~640*480可以顯示出來~但是我再去記憶體抓完放到image元件上就出現而我覺得是下面這段可能有問題但是我找不出是那錯希望各位大大能幫忙 //程式設定回傳的函式
capSetCallbackOnFrame (hCapWnd, &FrameCallBack); //某個函式把lpvhdr傳過來
LRESULT CALLBACK FrameCallBack( HWND hwnd, longint lpvhdr )
{
VideoStr=LPVIDEOHDR(lpvhdr);
//當它傳給我資料
//我要copy時出了錯,它的記憶體指標或者指標所指的資料造成存取違反
memcpy(CcdBuffer,VideoStr->lpData,ImageWidth*ImageHeight*3); capSetCallbackOnFrame (hCapWnd, NULL);
return(0);
}
#define ImageWidth 640 #define ImageHeight 480 HWND hCapWnd; LRESULT CALLBACK FrameCallBack( HWND, Longint); LPVIDEOHDR VideoStr; unsigned char *CcdBuffer=new unsigned char[ImageWidth*ImageHeight*3]; TForm1 *Form1; //-------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //------------------------------------------------------------------- class PasteIm { private: Byte *ptr2; int x,y; public: Graphics::TBitmap *pBitmap1; unsigned char *ImPasteBuf; PasteIm() { pBitmap1=new Graphics::TBitmap; ImPasteBuf=new unsigned char[ImageWidth*ImageHeight*3]; } void PasteMake(TImage *imag) { pBitmap1= imag->Picture->Bitmap ; for ( y = 0; y < ImageHeight; y ) { ptr2 = (Byte *)pBitmap1->ScanLine[y]; for ( x = 0; x < ImageWidth; x ) { ptr2[x*3]=ImPasteBuf[((ImageHeight-1-y)*ImageWidth)*3 (x*3)]; ptr2[x*3 1]=ImPasteBuf[((ImageHeight-1-y)*ImageWidth)*3 (x*3 1)]; ptr2[x*3 2]=ImPasteBuf[((ImageHeight-1-y)*ImageWidth)*3 (x*3 2)]; } } imag->Picture->Assign(pBitmap1); } }; //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, ImageWidth, ImageHeight,ImProcess->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); Timer1->Enabled =true; } //------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); } //------------------------------------------------------------------- LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr ) { VideoStr=LPVIDEOHDR(lpvhdr); memcpy(CcdBuffer,VideoStr->lpData,ImageWidth*ImageHeight*3); capSetCallbackOnFrame (hCapWnd, NULL); //停止callbackonframe return(0); } //----------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { capSetCallbackOnFrame (hCapWnd, &FrameCallBack); PasteIm k2; memcpy(k2.ImPasteBuf ,CcdBuffer,ImageWidth*ImageHeight*3); k2.PasteMake(Image1) ; } //-------------------------------------------------------------------發表人 - dragonhippopdc 於 2005/01/30 21:37:54 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |