Количество линий, которые можно нарисовать методом DrawLines
Я рисую серию линий на PrintPreviewControl, используя метод DrawLines. Вот мой код, в котором я беру значения x и y и преобразовываю их в координаты внутри прямоугольника страницы, добавляя их в список. Затем я вызываю DrawLines с помощью пера, и список преобразуется в массив. Я обнаружил, что DrawLines будет рисовать только 8125 линий, используя 8126 пар точек. Я не получаю никаких исключений при сбое DrawLines. Любой способ увеличить количество пар точек, которые будет использовать DrawLines? В качестве альтернативы, я мог бы нарисовать каждую линию отдельно или разбить массив точек на 8000 блоков точек.
Private Sub DrawGammaLog(ByVal gr As Graphics)
Try
'draw log in chart area
If Points.Count <> 0I Then
gr.SetClip(LogRect)
Dim LPoints As New List(Of PointF)
For Each pt In Points
Dim PointY As Single = LogRect.Top + ((pt.Depth - VScaleMinValue) * VScale)
Dim PointX As Single = LogRect.Left + (pt.Count * HScale)
If PointY >= LogRect.Top AndAlso PointY <= LogRect.Bottom Then
LPoints.Add(New PointF(PointX, PointY))
End If
Next
Debug.Print("{0}", LPoints.Count)
If LPoints.Count >= 2I Then gr.DrawLines(gpp.LogPen, LPoints.ToArray)
End If
'draw box around chart area
gr.DrawRectangle(gpp.LogPen, Rectangle.Round(LogRect))
Catch ex As Exception
MessageBox.Show(ex.Message.ToString & ", " & ex.Source.ToString, Me.Text & " DrawGammaLog")
Finally
gr.ResetClip()
End Try
End Sub
1 ответ
Та же проблема здесь с использованием C# в Visual Studio 2010. 8125 кажется пределом, даже если нет ссылок на эту проблему в Интернете...
В качестве обходного пути я разделил свой массив на блоки массивов 8000 PointF[].
int counter = 0;
int block_size = Math.Min(data.Length, 8000);
PointF[] data_subset;
while (counter != data.Length)
{
data_subset = new PointF[block_size];
Array.Copy(data, counter, data_subset, 0, data_subset.Length);
g.DrawLines(p, data_subset);
counter += block_size;
block_size = Math.Min(data.Length - counter, 8000);
}