[問題] 關於C#處理影像的效能問題

看板C_Sharp (C#)作者 (.....)時間9年前 (2016/03/08 16:40), 9年前編輯推噓1(1011)
留言12則, 6人參與, 最新討論串1/1
最近工作上碰到一個困境 要撰寫一隻即時影像的程式 原本我用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

03/08 18:23, , 1F
C#處理這種東西怎麼快都會有極限 可以考慮顯示的部分
03/08 18:23, 1F

03/08 18:24, , 2F
改用WRAPPER的方式用WIN32 API比較快
03/08 18:24, 2F

03/08 18:26, , 3F
可以考慮用WPF,UI Draw的效率好很多
03/08 18:26, 3F

03/08 18:26, , 4F
03/08 18:26, 4F

03/08 18:29, , 5F
graphics 的生命週期改成跟bmp_tmp相同,或可改善。
03/08 18:29, 5F

03/08 18:35, , 6F
是說你直接用UI的Graphics不就好了,可以少畫一次
03/08 18:35, 6F

03/08 18:37, , 7F
這個問題的重點在resize太花時間,用WPF應該會有不小改善
03/08 18:37, 7F

03/08 19:13, , 8F
ok!! 感謝
03/08 19:13, 8F

03/08 21:07, , 9F
c#處理影像請改用unsafe指標
03/08 21:07, 9F

03/22 01:55, , 10F
啊不會把你的C++包成Dll給Csharp用噢
03/22 01:55, 10F

03/22 10:28, , 11F
主要是沒辦法從指標轉回C#的bitmap物件啦...
03/22 10:28, 11F

03/22 10:28, , 12F
卡住的原因在這邊...|||
03/22 10:28, 12F
文章代碼(AID): #1Mtf0Bvr (C_Sharp)
文章代碼(AID): #1Mtf0Bvr (C_Sharp)