【发布时间】:2017-07-12 23:06:56
【问题描述】:
我正在为我的工作编写一个程序,它将采用自定义方向代码格式并根据给定的代码绘制形状并将结果保存到图像中。
例子:
SQR=W10 S10 E10 N10$.
将在图像上输出 10x10 正方形形状(N、S、E 和 W 是方向)。
我知道如何通过 WPF 应用程序使用 OnPaint 来完成这项工作,但我需要通过控制台应用程序来完成这项工作。我已经解析了所有的数据,并在类和集合中,所以我所要做的就是绘制。但我无法解决内存问题;它一次只画一条线,不保存前面的线。
我部分绘制的代码是:
Pen pen = new Pen(Color.Black, 2);
Bitmap bmp = new Bitmap(xMax, yMax);
using (var graphics = Graphics.FromImage(bmp))
{
graphics.FillRectangle(Brushes.White, new Rectangle(0, 0, xMax, yMax));
foreach (Line line in lines)
{
graphics.DrawLine(pen, line.start, line.end);
}
}
bmp.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
这是我使用 DrawLines 的代码,而不是:
Pen pen = new Pen(Color.Black, 2);
Bitmap bmp = new Bitmap(xMax, yMax);
using (var graphics = Graphics.FromImage(bmp))
{
graphics.FillRectangle(Brushes.White, new Rectangle(0, 0, xMax, yMax));
Point[] pts = new Point[lines.Count];
int i = 0;
pts[0] = lines[0].start; // This sets the starting point.
foreach (Line line in lines)
{
pts[i] = line.end;
i++;
}
graphics.DrawLines(pen, pts);
}
bmp.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
这是我的 Line 类:
class Line
{
public Point start { get; set; }
public Point end { get; set; }
}
这是我的点列表在绘制之前的样子:
我有哪些选项可以使用 System.Drawing 和控制台应用程序,并允许它将所有线条保存到生成的图像中?
【问题讨论】:
-
一定要使用 DrawLines 方法以获得更好的质量!它需要一个点数组,因此您应该重写创建线的代码。除此之外,代码看起来不错。我假设您确实包含了必要的参考资料..?你能显示
line类吗? -
我也尝试了 DrawLines,但我仍然只能得到同一条线。我可以展示 Line 类(它改编自我采用的不同路线,所以它并不完美,但它应该仍然有效)
-
我怀疑你的数据。 - 顺便说一句:我的意思是收集 List
中的所有点并一次性绘制它们:DrawLines(pen, points.ToArray()); -
我先看看Line集合写在画之前。
-
但是 DrawLines 只是用来绘制连续的,即连接的线!如果您需要单独的行,您的原始代码将尽可能好!
标签: c# bitmap console-application