我的代码 -> 显示波形立体声 .wav 文件
这里的 max_l 和 max_r 是每个通道中波形的最大值。
form2:= TForm2.Create(self);
form2.Image1.Visible := true;
form2.Image1.Width := numsamples;
form2.Image1.Height := max_l * 2;
form2.Image1.Canvas.Lock;
form2.Image1.Canvas.MoveTo(0,mid);
form2.Image1.Canvas.Pen.Color := clRed
form2.Image2.Visible := true;
form2.Image2.Width := numsamples;
form2.Image2.Height := max_r * 2;
form2.Image2.Canvas.Lock;
form2.Image2.Canvas.MoveTo(0,mid);
form2.Image2.Canvas.Pen.Color := clRed
x:=0;
for i := 0 to numchannels do begin
if i mod 2 = 0 then begin
form2.Image2.Canvas.MoveTo(x,max_r);
form2.Image2.Canvas.LineTo(x,max_r+buff[i]);
x:=x+1;
end
else begin
form2.Image1.Canvas.MoveTo(x,max_l);
form2.Image1.Canvas.LineTo(x,max_l+buff[i]);
end;
end;
我想知道 TImage Delphi 最大高度和宽度的最大值是多少?因为我正在尝试绘制 .wav 文件的整个波形的大图。例如,现在我得到了 image1.height = 23000 并得到了 EOutOfResource 问题,或者我的代码可能有错误?任何建议将不胜感激。
EDIT1:我也尝试使用draw bmp然后用stretchdraw方法调整它但它也不起作用,这是我的代码,主要思想是首先我将超大原始尺寸绘制到bmp中,然后使用StretchDraw函数缩小它然后绘制它在 TImage 上。但仍然位图也给我同样的问题EOutOfResources。
form2:= TForm2.Create(self);
form2.Image1.Visible := true;
bmp:=TBitmap.Create;
bmp.Height:=max_l*2;
bmp.Width:=numsamples;
bmp.Canvas.Pen.Color:=clRed;
bmp.Canvas.MoveTo(0,max_l);
x:=0;
for i := 0 to numchannels do begin
if i mod 2 = 0 then begin
bmp.Canvas.MoveTo(x,max_r);
bmp.Canvas.LineTo(x,max_r+buff[i]);
x:=x+1;
end;
end;
newwidth:=1000;
newheight:=500;
bmp.Canvas.StretchDraw(rect(0,0,newheight,newwidth),bmp);
form2.Image1.Canvas.Draw(0,0,bmp);