TImage delphi最大宽度和高度?

时间:2013-05-28 10:41:18

标签: delphi delphi-7 timage

我的代码 - >显示波形立体声.wav文件

max_l和max_r here是每个通道中波形的最高值。

 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);

2 个答案:

答案 0 :(得分:0)

这取决于您的已安装和可用内存(除了其他因素,如OS版本(七个更好),OS版本(64位更好),已分配的位图数量。

如果您遇到此问题但无法通过更多硬件解决,则应将图像平铺在多个子图像中,并将输出调整为更接近标准显示器分辨率的值。

答案 1 :(得分:0)

将TImage组件放在TScrollBox中并在TImage中设置AutoSize选项,并使用[MaxInt]获取整数的最大值。

Image1.AutoSize := true;
当我在玩这个项目时,

指向我试图显示的大文件中的[AutoSize]问题。 https://community.embarcadero.com/blogs/entry/converting-to-grayscale-with-tbitmapscanline-property-39051

来自.. https://community.embarcadero.com/blogs/entry/converting-to-grayscale-with-tbitmapscanline-property-39051 - [uBitmapUtils.pas]

的MaxInt示例
TBGR32 = packed record
  B, G, R, A: Byte;
end;
TBGR32Array = packed array[0..MaxInt div SizeOf(TBGR32)-1] of TBGR32;
PBGR32Array = ^TBGR32Array;