2

你好。

            PointPairList list = new PointPairList();
            LineItem myCurve = myPane.AddCurve("My Curve", list, Color.Blue,
                                    SymbolType.None);
            for (int x = y; x < buffer.Length; x++)
            {
                list.Add(x, buffer[x]);
            }

我有一个文件,它的大小是 40 MB。我正在读取字节并将数据写入缓冲区,因此buffer.lenght得到大量数据。因此程序由于长 for 循环而抛出内存异常。如何在不占用内存异常的情况下绘制所有字节。?

4

1 回答 1

1

您将需要预处理字节数组,生成一个较小的数据集,该数据集是最大水平宽度或图表的 2 倍。

要显示一个 maxWidth 像素宽的图表,您将执行以下操作。

int window = (buffer.Length / maxWidth) + 1;

for (int x = 0; x < buffer.Length; x += window)
{
    double min = double.MaxValue;
    double max = double.MinValue;

    for (int j = 0; j < window; j++)
    {
        int index = x + j;

        if (index < buffer.Length)
        {
            double value = buffer[x+j];
            if (value < min)
            {
                min = value;
            }

            if (value > max)
            { 
                max = value;
            }
        }
    }

    list.Add(x, min);
    list.Add(x + (window - 1), max);
}

如果放大,则需要重新计算点列表,以免最终得到锯齿线。

于 2013-09-06T23:08:37.470 回答