C# /GDI Graphics Scaling (Drawline)
我正在写一些东西来从矢量格式文件创建小的位图预览。从文件中,我有一个(大)线坐标列表。我想要做的是缩放它以使其适合固定宽度的图像(96x96)。我之前一直在以全尺寸绘制位图,然后只是将其调整为 96x96,但由于需要动态创建缩略图,结果证明速度不够快(而且这是一种非常愚蠢的方法首先!)。现在我只想缩放所有坐标,就好像原始尺寸是 96x96 一样,删除所有相互重叠的点,这应该会大大提高性能。
我是任何和所有 .NET 图形/GDI 东西的绝对新手,第一个版本非常简单(代码如下)。我想知道图形库(或其他地方)中是否有一些东西可以做到这一点,而我不必遍历所有点并对每个点进行数学运算。
图形/GDI 大师能否为我指明正确的方向(或让我知道没有方向)?我正在使用 C#,.NET 框架目标是好的。
到目前为止,它非常简单(tmpblocks 是一个点数组):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Bitmap DrawArea; Graphics xGraph; DrawArea = new Bitmap(64, 64); // ^- this is GetWidth() and GetHeight() when drawing the full file at full size xGraph = Graphics.FromImage(DrawArea); for (int i = 0; i < tmpblocks.Count; i++) { if (tmpblocks[i].stitches.Length > 1) { Pen tempPen = new Pen(tmpblocks[i].color, 1.0f); tempPen.StartCap = System.Drawing.Drawing2D.LineCap.Round; tempPen.EndCap = System.Drawing.Drawing2D.LineCap.Round; tempPen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; xGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; xGraph.DrawLines(tempPen, tmpblocks[i].stitches); } } |
对于缩略图,我只需使用 .GetThumbnail 方法缩放生成的位图。真的很慢,虽然(显然)......
您可以使用
你可以从:TargetWidth / SourceWidth 得到 sx
和 sy 来自:TargetHeight / SourceHeight
其中目标由您的目标图像大小定义,源是您的源图像大小。