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

Euresys EBW8Image RAW Queue

 
anumis
一般會員


發表:25
回覆:27
積分:15
註冊:2006-07-14

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