誠心請教!在網上找的demo,C#開發,使用halcon和DALSA的dll。
目前識別相機、獲取相機資訊、連接相機、各種實體化包括實時幀率都是OK的,就是到了halcon獲取圖片資料就出問題了。
下面貼代碼:
void m_Xfer_XferNotify(object sender, SapXferNotifyEventArgs argsNotify)
{
//首先需判斷此幀是否是廢棄幀,若是則立即回傳,等待下一幀(但這句話似乎有時候m_Xfer.Snap(n)時會導致丟幀,可以注釋掉試試)
if (argsNotify.Trash) return;
//獲取m_Buffers的地址(指標),只要知道了圖片記憶體的地址,其實就能有各種辦法搞出圖片了(例如轉成Bitmap)
IntPtr addr;
m_Buffers.GetAddress(out addr);
MessageBox.Show("addr="+addr);
//PixelFormat pf = PixelFormat.Format8bppIndexed;
//Bitmap bmp = new Bitmap(m_Buffers.Width, m_Buffers.Height, m_Buffers.Pitch, pf, addr);
//觀察buffer中的圖片的一些屬性值,陳述句后注釋里面的值是可能的值
int count = m_Buffers.Count; //2
SapFormat format = m_Buffers.Format; //Uint8
double rate = m_Buffers.FrameRate; //采集頻率30.0,連續采集時,這個值會動態變化
MessageBox.Show("rate=" + rate);
int height = m_Buffers.Height; //1000高
int width = m_Buffers.Width; //4096寬
int pixd = m_Buffers.PixelDepth; //8深度,8b/像素
//顯示實時幀率
UpdateFrameRate();
lbl_FrameRate.BeginInvoke(new Action(() => { lbl_FrameRate.Text = m_Buffers.FrameRate.ToString(); }));
MessageBox.Show("FrameRate=" + m_Buffers.FrameRate.ToString());
//利用halcon從記憶體中采集圖片并保存
HObject ImageTemp = null;
HOperatorSet.GenImage1(out ImageTemp, "byte", 4096, 1000, addr);//取記憶體資料,生成影像,halcon實作
MessageBox.Show("==");
hWindowControl1.HalconWindow.SetPart(0, 0, 1000, 4096);
HOperatorSet.DispObj(ImageTemp, hWindowControl1.HalconWindow);
picCountNum++;
HOperatorSet.WriteImage(ImageTemp, "bmp", 0, " D: \\imga\\" + picCountNum + ".bmp");
}
出問題的就是在 HOperatorSet.GenImage1(out ImageTemp, "byte", 4096, 1000, addr);這一行,往下不彈框。
另外比較奇怪的一點,根據彈框的列印情況,我會執行兩次,第一次頻率為默認30,更新為0,第二次頻率為0,更新為實際頻率。
最主要的是,希望大家可以指導一下,為什么程式到了GenImage1就不往下執行了,圖片既沒有展示也沒有保存下來。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/263595.html
標籤:C#
