作者hidog (.....)
看板C_Sharp
標題[問題] 關於C#處理影像的效能問題
時間Tue Mar 8 16:40:40 2016
最近工作上碰到一個困境
要撰寫一隻即時影像的程式
原本我用QT撰寫,老闆以這邊都只會寫C#當理由,希望我用C#重寫
重寫完後,效能出問題了orz|||
Graphics g = Graphics.FromImage(bmp_tmp);
//
foreach(...)
g.DrawImage( bmp, rect1, rect2, GraphicsUnit.Pixel );
g.Dispose();
...
// 將bmp_tmp丟到UI上面
目前一個已知的瓶頸在於這邊
當stream每個frame都要做一次DrawImage的時候,速度上會跟C++有明顯落差.
C++我的習慣就是init狀態下就new好記憶體,用指標的方式去複製影像資料
但是C#這些技巧都不管用 orz
想請教一下,在C#上面處理影像,是否有比較快的做法
這次真的被老闆難倒了orz|||
補充,影像解析度是2592*1944,DrawImage的rect約640*480,四個rect.
及時串流的fps約30,但是可以跳frame.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.167.9
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1457426443.A.E75.html
※ 編輯: hidog (1.34.167.9), 03/08/2016 16:45:04
→ erspicu: C#處理這種東西怎麼快都會有極限 可以考慮顯示的部分 03/08 18:23
→ erspicu: 改用WRAPPER的方式用WIN32 API比較快 03/08 18:24
→ Litfal: 可以考慮用WPF,UI Draw的效率好很多 03/08 18:26
→ wvsrugby: graphics 的生命週期改成跟bmp_tmp相同,或可改善。 03/08 18:29
→ Litfal: 是說你直接用UI的Graphics不就好了,可以少畫一次 03/08 18:35
→ Litfal: 這個問題的重點在resize太花時間,用WPF應該會有不小改善 03/08 18:37
→ hidog: ok!! 感謝 03/08 19:13
→ O187: c#處理影像請改用unsafe指標 03/08 21:07
推 SANDER00: 啊不會把你的C++包成Dll給Csharp用噢 03/22 01:55
→ hidog: 主要是沒辦法從指標轉回C#的bitmap物件啦... 03/22 10:28
→ hidog: 卡住的原因在這邊...||| 03/22 10:28