C#/GDI 缩放图形降低了 FillRegion 方法的性能

问题描述

我无法理解为什么 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 (将#修改为@)