现有应用程序加载大量图像缩略图并在画布中旋转/定位它们(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个图像的平移,旋转和缩放。只要我们不使用比例变换,这就不那么糟糕了 - (我想系统已针对旋转进行了优化)。
所以问题是,优化这个的方法是什么?
答案 0 :(得分:0)
事实证明,这个问题不是规模转换。问题是代码在GUI渲染期间引入了异常。由于异常处理是广泛的,我们有上述性能问题。在我们检查日志之前,我们没有意识到这个问题,因为代码必须在GUI渲染中的异常之后继续,因此没有明显的异常发生迹象。