全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1691
推到 Plurk!
推到 Facebook!

使用bcb控制ccd後要貼到image物件上如何改變大小

 
dragonhippop
一般會員


發表:5
回覆:0
積分:1
註冊:2004-12-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-28 23:53:33 IP:218.175.xxx.xxx 未訂閱
各位大大好:
小弟利用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]
系統時間:2024-05-03 12:34:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!