瓜子说
??????? 現在的我,一邊嗑著瓜子,一邊聽著歌,一邊寫著這篇文章。相比于幾天前天天熬夜調代碼的生活實在是愜意,總之就是項目基本告一段落了,大部分完成了,接下來就等客戶的反饋。我就總結一下項目中遇到的各種bug,各種神奇的情況。
??????? 記得最清楚的是前幾天要打包了,突然發現項目里面emgucv的版本竟然不一樣,因為是拿別人的代碼來做的,所以所有的dll文件還是以前別人的,從而導致打完包之后運行項目會報一個cvinvoke初始值未設定的異常,后來統一了一下emgucv的版本,用的2.4.9的,但是還會有這種異常,然后就加入了一些opencv的dll,異常就解決了。而且還有一個問題,至今未解決,用c#的video類加載視時,只能加載一些小的視頻,大的視頻加載不了,而換了同學的電腦就可以。。。
另外一些零碎的知識:
1.利用代碼對窗體大小和位置進行初始化時,必須加上this.StartPosition = FormStartPosition.Manual;指明是人為設置的
2.內存回收機制,由于項目所用圖片比較大,一張圖片有十幾M,所以往往跑完一遍內存就到了五六百M,原因是自動回收機制回收不及時,加上cvinvoke.cvcreateimage申請的內存要手動釋放,emgucv里的image<TCOLOR, TDEPTH>申請的內存也不歸自動釋放機制管理,最后還是沒有弄懂這個怎么釋放,只是加上了dispose,然后每次處理完之后手動調用?GC.GetTotalMemory(true);進行強制回收
3.最后,picturebox里面的圖像放大,利用鼠標滾輪的方法,先將picturebox的sizemode設置為zoom,然后貼代碼
<span style="font-family:KaiTi_GB2312;font-size:18px;">private void pictureBox1_MouseEnter(object sender, EventArgs e){pictureBox1.Focus();}</span>還有一個問題,鼠標滾輪的事件怎么找都找不到,就只能在窗體加載的時候添加一個了 <span style="font-family:KaiTi_GB2312;font-size:18px;">private void Check_Form_Load(object sender, EventArgs e){pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel);}private void pictureBox1_MouseWheel(object sender, MouseEventArgs e){if (pictureBox1.Image != null){//throw new NotImplementedException();if (e.Delta >= 0){pictureBox1.Width = (int)(pictureBox1.Width * 1.1);//因為Widthh和Height都是int類型,所以要強制轉換一下-_-||pictureBox1.Height = (int)(pictureBox1.Height * 1.1);}else{pictureBox1.Width = (int)(pictureBox1.Width * 0.9);pictureBox1.Height = (int)(pictureBox1.Height * 0.9);}}}</span>
另外的一些注意,圖像不要dispose太快。。。
總結