检查下面的代码,找出错误病修改:public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //以下是正确内容 OpenFileDialog openFileDialog = new OpenFileDialog(); WaveFileReader waveFileReader; DialogResult dialogResult = openFileDialog.ShowDialog(); waveFileReader = new WaveFileReader(openFileDialog.FileName); waveViewer1.WaveStream = waveFileReader; WaveFileChunkReader waveFileChunkReader = new WaveFileChunkReader(); waveFileChunkReader.ReadWaveHeader(waveFileReader); byte[] buffer = new byte[2048]; waveFileReader.Read(buffer, 8, buffer.Length); byte[] halfbuffer = new byte[1024]; // 将buffer1的内容平均除以2并复制到buffer2中 for (int i = 0; i < halfbuffer.Length; i++) { halfbuffer[i] = (byte)(buffer[i * 2] / 2 + buffer[i * 2 + 1] / 2); } //作业:使用GDI+把halfbuffer的数据绘制到panel里去。 } public class chunk { public List<char> ID; public int size; public List<Byte> Data; } private void waveViewer1_Load(object sender, EventArgs e) { } private void panel1_Paint(object sender, PaintEventArgs e) { byte[] halfbuffer = new byte[1024]; // 将buffer1的内容平均除以2并复制到buffer2中 for (int i = 0; i < halfbuffer.Length; i++) { halfbuffer[i] = (byte)(buffer[i * 2] / 2 + buffer[i * 2 + 1] / 2); } Graphics g = e.Graphics; int panelHeight = panel1.Height; int panelWidth = panel1.Width; Pen pen = new Pen(Color.Black); // Calculate the distance between each point float pointDistance = (float)panelWidth / halfbuffer.Length; // Scale the heights so they fit into the panel float heightScaling = (float)panelHeight / 256; // Draw the waveform for (int i = 0; i < halfbuffer.Length - 1; i++) { float x1 = i * pointDistance; float y1 = halfbuffer[i] * heightScaling; float x2 = (i + 1) * pointDistance; float y2 = halfbuffer[i + 1] * heightScaling; g.DrawLine(pen, x1, y1, x2, y2); } } }
时间: 2024-03-31 10:35:23 浏览: 20
在panel1_Paint方法中,buffer数组没有定义,需要在方法中声明并且赋值。可以将byte[] halfbuffer = new byte[1024]; 语句移到panel1_Paint方法内,并在该语句之前添加byte[] buffer = new byte[2048];。同时,为了防止内存泄漏,需要将Pen对象使用完毕后及时释放资源,可以使用using语句块来完成。
修改后的代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//以下是正确内容
OpenFileDialog openFileDialog = new OpenFileDialog();
WaveFileReader waveFileReader;
DialogResult dialogResult = openFileDialog.ShowDialog();
waveFileReader = new WaveFileReader(openFileDialog.FileName);
waveViewer1.WaveStream = waveFileReader;
WaveFileChunkReader waveFileChunkReader = new WaveFileChunkReader();
waveFileChunkReader.ReadWaveHeader(waveFileReader);
byte[] buffer = new byte[2048];
waveFileReader.Read(buffer, 8, buffer.Length);
byte[] halfbuffer = new byte[1024];
// 将buffer1的内容平均除以2并复制到buffer2中
for (int i = 0; i < halfbuffer.Length; i++)
{
halfbuffer[i] = (byte)(buffer[i * 2] / 2 + buffer[i * 2 + 1] / 2);
}
//作业:使用GDI+把halfbuffer的数据绘制到panel里去。
}
public class chunk
{
public List<char> ID;
public int size;
public List<Byte> Data;
}
private void waveViewer1_Load(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
byte[] buffer = new byte[2048];
byte[] halfbuffer = new byte[1024];
// 将buffer1的内容平均除以2并复制到buffer2中
for (int i = 0; i < halfbuffer.Length; i++)
{
halfbuffer[i] = (byte)(buffer[i * 2] / 2 + buffer[i * 2 + 1] / 2);
}
using (Pen pen = new Pen(Color.Black))
{
Graphics g = e.Graphics;
int panelHeight = panel1.Height;
int panelWidth = panel1.Width;
// Calculate the distance between each point
float pointDistance = (float)panelWidth / halfbuffer.Length;
// Scale the heights so they fit into the panel
float heightScaling = (float)panelHeight / 256;
// Draw the waveform
for (int i = 0; i < halfbuffer.Length - 1; i++)
{
float x1 = i * pointDistance;
float y1 = halfbuffer[i] * heightScaling;
float x2 = (i + 1) * pointDistance;
float y2 = halfbuffer[i + 1] * heightScaling;
g.DrawLine(pen, x1, y1, x2, y2);
}
}
}
}