首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NAudio和ZedGraph波形绘图

NAudio和ZedGraph波形绘图
EN

Stack Overflow用户
提问于 2013-09-18 11:53:33
回答 1查看 1.2K关注 0票数 2
代码语言:javascript
运行
复制
    int window;
    LineItem myCurve1;
    LineItem myCurve2;
    public void DrawWave(ZedGraphControl zgc)
    {

        NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
        WaveFileReader wavFile = new WaveFileReader(open.FileName);
        byte[] mainBuffer = new byte[wave.Length];

        float fileSize = (float)wavFile.Length / 1048576;
        if (fileSize < 2)
            window = 8;
        else if (fileSize > 2 && fileSize < 4)
            window = 16;
        else if (fileSize > 4 && fileSize < 8)
            window = 32;
        else if (fileSize > 8 && fileSize < 12)
            window = 128;
        else if (fileSize > 12 && fileSize < 20)
            window = 256;
        else if (fileSize > 20 && fileSize < 30)
            window = 512;
        else
            window = 2048;

        float[] fbuffer = new float[mainBuffer.Length / window];
        wave.Read(mainBuffer, 0, mainBuffer.Length);

        for (int i = 0; i < fbuffer.Length; i++)
        {
            fbuffer[i] = (BitConverter.ToSingle(mainBuffer, i * window));
        }

        double time = wave.TotalTime.TotalSeconds;
        GraphPane myPane = zgc.GraphPane;
        PointPairList list1 = new PointPairList();
        PointPairList list2 = new PointPairList();
        for (int i = 0; i < fbuffer.Length; i++)
        {
            list1.Add(i, fbuffer[i]);
        }
        list2.Add(0, 0);
        list2.Add(time, 0);
        if (myCurve1 != null && myCurve2 != null)
        {
            myCurve1.Clear();
            myCurve2.Clear();
        }

        myCurve1 = myPane.AddCurve(null, list1, Color.Red, SymbolType.None);
        myCurve1.IsX2Axis = true;
        myCurve2 = myPane.AddCurve(null, list2, Color.Black, SymbolType.None);
        myPane.XAxis.Scale.MaxAuto = true;
        myPane.XAxis.Scale.MinAuto = true;
        zgc.AxisChange();
        zgc.Invalidate();
    }

我有这段代码来绘制ZedGraph的波形。它工作良好,除了一个thing.After绘制一个波形,我选择一个新的文件绘制,但我必须清除旧的一个。我试图在全局中定义LineItem,这样我就可以编写if(myCruver != null) myCurve.Clear(); --这个condition.However --它不能清除旧的绘图。我该怎么办才能解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-20 14:03:20

代码语言:javascript
运行
复制
    int window;
    LineItem myCurve1;
    LineItem myCurve2;
    public void DrawWave(ZedGraphControl zgc)
    {

        NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
        WaveFileReader wavFile = new WaveFileReader(open.FileName);
        byte[] mainBuffer = new byte[wave.Length];

        float fileSize = (float)wavFile.Length / 1048576;
        if (fileSize < 2)
            window = 8;
        else if (fileSize > 2 && fileSize < 4)
            window = 16;
        else if (fileSize > 4 && fileSize < 8)
            window = 32;
        else if (fileSize > 8 && fileSize < 12)
            window = 128;
        else if (fileSize > 12 && fileSize < 20)
            window = 256;
        else if (fileSize > 20 && fileSize < 30)
            window = 512;
        else
            window = 2048;

        float[] fbuffer = new float[mainBuffer.Length / window];
        wave.Read(mainBuffer, 0, mainBuffer.Length);

        for (int i = 0; i < fbuffer.Length; i++)
        {
            fbuffer[i] = (BitConverter.ToSingle(mainBuffer, i * window));
        }

        double time = wave.TotalTime.TotalSeconds;
        GraphPane myPane = zgc.GraphPane;
        PointPairList list1 = new PointPairList();
        PointPairList list2 = new PointPairList();
        for (int i = 0; i < fbuffer.Length; i++)
        {
            list1.Add(i, fbuffer[i]);
        }
        list2.Add(0, 0);
        list2.Add(time, 0);
        if (myCurve1 != null && myCurve2 != null)
        {
            myCurve1.Clear();
            myCurve2.Clear();
        }

        myCurve1 = myPane.AddCurve(null, list1, Color.Red, SymbolType.None);
        myCurve1.IsX2Axis = true;
        myCurve2 = myPane.AddCurve(null, list2, Color.Black, SymbolType.None);
        myPane.XAxis.Scale.MaxAuto = true;
        myPane.XAxis.Scale.MinAuto = true;
        zgc.AxisChange();
        zgc.Invalidate();
    }

我刚把LineItems of list1和list2分开。现在它很好用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18871547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档