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