GDI +图像加载效率

时间:2015-06-09 00:36:50

标签: c# image gdi+

现有应用程序加载大量图像缩略图并在画布中旋转/定位它们(​​GDI + Graphics对象)。

它的工作方式不是非常有效,但在我们有一个功能请求可以向图像添加缩放变换之前就可以了。

当前代码如下所示

//Images is a collection of ImgInfo, a user defined class
//contains the width, height, offsets, scale factors, and rotation
//in addition to a Bitmap thumbnail.
foreach (var imgInfo in Images)
{
    var imgRect = new Rectangle(0, 0, imgInfo.Width, imgInfo.Height);
    int dx = imgInfo.XOffset, dy = imgInfo.YOffset;

    //Transform the canvas to the drawing coordinate system
    graphics.TranslateTransform(dx, dy);
    graphics.ScaleTransform(1 / (float)imgInfo.ScaleX, 1 / (float)imgInfo.ScaleY);
    graphics.RotateTransform(-imgInfo.Rotation);
    //Center the image
    graphics.TranslateTransform(-imgInfo.Width / 2, -imgInfo.Height / 2);

    graphics.DrawImage(imgInfo.Thumbnail, imgRect);

    //Transform back to the display coordinate system
    graphics.TranslateTransform(imgInfo.Width / 2, imgInfo.Height / 2);
    graphics.RotateTransform(imgInfo.Rotation);
    graphics.ScaleTransform((float)imgInfo.ScaleX, (float)imgInfo.ScaleY);
    graphics.TranslateTransform(-dx, -dy);
}

我怀疑的原因如下。假设我有1000个缩略图,绘制第999个缩略图将导致到目前为止绘制的所有998个图像的平移,旋转和缩放。只要我们不使用比例变换,这就不那么糟糕了 - (我想系统已针对旋转进行了优化)。

所以问题是,优化这个的方法是什么?

1 个答案:

答案 0 :(得分:0)

事实证明,这个问题不是规模转换。问题是代码在GUI渲染期间引入了异常。由于异常处理是广泛的,我们有上述性能问题。在我们检查日志之前,我们没有意识到这个问题,因为代码必须在GUI渲染中的异常之后继续,因此没有明显的异常发生迹象。