问题描述
我无法理解为什么 Graphics.ScaleTransform 会大幅降低 Graphics.FillRegion 的性能。
我正在开发一个应用程序,在该应用程序中我在 PictureBox 的绘制事件中绘制 Regions。此过程按预期工作,性能非常好,没有任何延迟。当我将 ScaleTransform 方法与自定义缩放工具一起使用时,就会出现问题。
到目前为止我的代码是这样的:
protected void drawPicBox(object sender,PaintEventArgs e)
{
e.Graphics.SetClip(new Rectangle(picBox_x_padding,picBox_y_padding,(picBox_x_padding == 0.0) ? picBoxImage.Width : picBoxImage.Width - 2 * .picBox_x_padding,(picBox_y_padding == 0.0) ? picBoxImage.Height : picBoxImage.Height - 2 * picBox_y_padding));
if (zoom_rate > 1.0)
{
e.Graphics.ScaleTransform(zoom_rate,zoom_rate);
}
e.Graphics.InterpolationMode = System.Drawing.drawing2d.InterpolationMode.NearestNeighbor;
e.Graphics.CompositingQuality = CompositingQuality.HighSpeed;
e.Graphics.PixelOffsetMode = PixelOffsetMode.HighSpeed;
e.Graphics.SmoothingMode = System.Drawing.drawing2d.SmoothingMode.AntiAlias;
foreach (var item in regions)
{
// Paint the semantic group
e.Graphics.FillRegion(new SolidBrush(item.Color),item.Region);
}
}
虽然没有设置缩放(zoom_rate == 1.0),但算法在运行时间方面运行良好(~20ms),但是一旦 zoom_rate 超过 1.0 并执行图形缩放,运行时间开始以每 0.2 倍的 zoom_rate 增加大约 30 毫秒的系数上升。
对于我的应用程序,这是完全不可接受的,因为在将图片框中显示的图像放大太多后(图像大小在每个维度上永远不会超过 1200 像素),经过的时间开始超过 200 毫秒,这使得过程处理起来真的很乏味。
我不知道我是否遗漏了什么,但我很感激任何关于如何处理这个问题的建议。
先谢谢你!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)