在System.Drawing中有一个名为DrawLines的命令。
https://msdn.microsoft.com/en-us/library/83k7w0zx(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
我需要在"单一格式"中将数组X和Y绘制为PointF。但是有一个" F"在每个X和Y点的末尾。
protected void Page_Load(object sender, EventArgs e)
{
double[] X = new double[]{10,15,20,25,30};
double[] Y = new double[]{100,150,200,250,300};
using (Bitmap xPanel = new Bitmap(500, 500))
{
using (Graphics objGraphicPanel = Graphics.FromImage(xPanel))
{
for (int nn = 2; nn <= 5; nn++)
{
float x1 = Convert.ToSingle(X[nn - 1]);
float y1 = Convert.ToSingle(Y[nn - 1]);
float x2 = Convert.ToSingle(X[nn]);
float y2 = Convert.ToSingle(Y[nn]);
PointF[] ptf =
{
new PointF(x1, y1),
new PointF(x2, y2)
};
objGraphicPanel.DrawLines(colorPen, ptf);
xPanel.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
}
string Imgbase64 = Convert.ToBase64String(ms.ToArray());
MyImage.Src = "data:image/png;base64," + Imgbase64;
objGraphicPanel.Dispose();
}
xPanel.Dispose();
这不起作用,因为它必须采用以下格式:
PointF[] ptf =
{
new PointF(10.56F, 25.78654F),
new PointF(500.123456F, 234.567F)
};
PointF需要&#34;浮动单一&#34;格式,但我也需要&#34; F&#34;在每个数组的末尾指向PointF和DrawLines。
我如何得到&#34; F&#34;之后还是等价的代码?
这只是我的阵列更大的一个例子。
答案 0 :(得分:0)
地方
PointF[] ptf =
{
new PointF(x1, y1),
new PointF(x2, y2)
};
不是问题。 PointF只接受float参数。当您在数字的末尾加上'F'时,您只需告诉编制者您的号码是浮点数(不是双倍)。在您的代码值中,x1,x2,y1,y2已经浮动,因为您将它们定义为
float x1 = ...
float y1 = ...
问题是,你将数组从2迭代到5.在C#中,数组中的数字是从0到N-1(N是数组的长度)。所以你应该写
for (int nn = 1; nn < 5; nn++)
或者,这是更好的
for (int nn = 1; nn < X.Length; nn++)
此外,您还可以在每次迭代时保存图像。我想
xPanel.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
应该在周期之外。
当你写
时using (...)
{
...
}
您不需要在括号(和)内部处理您创建的项目。在使用操作符的末尾自动调用dispose。 所以行
objGraphicPanel.Dispose();
和
xPanel.Dispose();
是多余的。
此外,没有必要创建用于绘制单行的数组ptf。您可以使用DrawLine方法:
objGraphicPanel.DrawLine(colorPen, x1, y1, x2, y2);
所以,下面的代码应该可以正常工作
protected void Page_Load(object sender, EventArgs e)
{
double[] X = new double[]{10,15,20,25,30};
double[] Y = new double[]{100,150,200,250,300};
using (Bitmap xPanel = new Bitmap(500, 500))
{
using (Graphics objGraphicPanel = Graphics.FromImage(xPanel))
{
for (int nn = 1; nn < X.Length; nn++)
{
float x1 = Convert.ToSingle(X[nn - 1]);
float y1 = Convert.ToSingle(Y[nn - 1]);
float x2 = Convert.ToSingle(X[nn]);
float y2 = Convert.ToSingle(Y[nn]);
objGraphicPanel.DrawLine(colorPen, x1, y1, x2, y2);
}
}
xPanel.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
}