Euresys EBW8Image RAW Queue |
|
anumis
一般會員 發表:25 回覆:27 積分:15 註冊:2006-07-14 發送簡訊給我 |
這段程式是使用TMemoryStream當作影像暫存Buffer,拿來批次取像及批次存檔用的
其實不一定要用Euresys,理論上所有相機都可以套上去用;只要能取得Raw的Pointer 在Form 上放 ECamera, EBW8Image, Button 程式是寫在 OnSignal裡 這段程式碼包含存入Queue及從Queue拉出來 有需要的版友自行服用,有更好的想法,也要記得分享出來 [code delphi] pMemQueue :TMemoryStream pMemQueue := TMemoryStream.Create; pMemQueue.Size := 0; pMemQueue.Position := 0; ... procedure TfmHR70.ECamera1Signal(ASender: TObject; SignalType: TOleEnum; const Obj: IDispatch; Last: WordBool); var pRawPtr :PByteArray; i :Integer; bmp :TBitmap; begin case SignalType of eMcSigSurfaceFilled: begin if CheckBox1.Checked then begin pRawPtr := PByteArray(EBW8Image1.GetImagePointer(0, 0)); pMemQueue.Write(pRawPtr[0], EBW8Image1.ImageWidth *EBW8Image1.ImageHeight); //pMemQueue.SaveToFile(...) <- 存出來的檔案就是RAW bmp := TBitmap.Create; bmp.PixelFormat := pf8bit; bmp.Palette := CreatePalette(SysPal.lPal); bmp.SetSize(EBW8Image1.ImageWidth, EBW8Image1.ImageHeight); for i := 0 to EBW8Image1.ImageHeight -1 do begin pMemQueue.Position := i *(EBW8Image1.ImageWidth 8); //EBW8Image的RAW DATA 每行會多8個長度,所以在移動Position 時,要加上去 pRawPtr := bmp.ScanLine[i]; pMemQueue.Read(pRawPtr[0], EBW8Image1.ImageWidth); end; Image1.Picture.Assign(bmp); FreeAndNil(bmp); end else begin EBW8Image1.DrawToDC(Image1.Canvas.Handle); Image1.Repaint; end; end; end; end; ... FreeAndNil(pMemStream) [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |