2016-06-08 4 views
-1

System.Drawing에는 DrawLines라는 명령이 있습니다.System.Drawing DrawLines with Variables

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으로하지만, 각각의 X 및 Y 포인트의 끝에서 "F"로 그려 될 필요가있다.

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이 요구하는 형식으로 "하나를 떠"그러나 나는 또한 각 배열 포인트의 끝에서 "F"를 필요 PointF와 DrawLines가 작동하도록하십시오.

"F"나 그 코드를 어떻게 얻을 수 있습니까?

이것은 배열이 훨씬 큰 예입니다.

답변

0

장소

PointF[] ptf = 
{ 
    new PointF(x1, y1), 
    new PointF(x2, y2) 
}; 

문제가되지 않습니다. PointF는 float 인수 만 허용합니다. 숫자 끝에 F를 붙이면 컴파일러에게 숫자가 실수 (double가 아님)라고 말합니다. 코드는 X1, X2, Y1을, 값 Y2는 이미

float x1 = ... 
float y1 = ... 

문제는로 정의하기 때문에 당신이 배열에서 C#을 기수법 5. 2에서 배열을 반복하는 것이, 부동 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는 using 연산자의 끝에서 자동으로 호출됩니다. 그래서 라인

objGraphicPanel.Dispose(); 

xPanel.Dispose(); 

중복입니다.

또한 한 줄을 그리기 위해 ptf 배열을 만들 필요가 없습니다.

objGraphicPanel.DrawLine(colorPen, x1, y1, x2, y2); 

는 그래서, folowing 코드가 잘

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); 
} 
작업 갈까요 : 당신은 DrawLine 방법을 사용할 수 있습니다