作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1457426443.A.E75.html
※ 编辑: hidog (1.34.167.9), 03/08/2016 16:45:04
1F:→ erspicu: C#处理这种东西怎麽快都会有极限 可以考虑显示的部分 03/08 18:23
2F:→ erspicu: 改用WRAPPER的方式用WIN32 API比较快 03/08 18:24
3F:→ Litfal: 可以考虑用WPF,UI Draw的效率好很多 03/08 18:26
5F:→ wvsrugby: graphics 的生命周期改成跟bmp_tmp相同,或可改善。 03/08 18:29
6F:→ Litfal: 是说你直接用UI的Graphics不就好了,可以少画一次 03/08 18:35
7F:→ Litfal: 这个问题的重点在resize太花时间,用WPF应该会有不小改善 03/08 18:37
8F:→ hidog: ok!! 感谢 03/08 19:13
9F:→ O187: c#处理影像请改用unsafe指标 03/08 21:07
10F:推 SANDER00: 啊不会把你的C++包成Dll给Csharp用噢 03/22 01:55
11F:→ hidog: 主要是没办法从指标转回C#的bitmap物件啦... 03/22 10:28
12F:→ hidog: 卡住的原因在这边...||| 03/22 10:28