Максимальная ширина и высота TImage delphi?

Мой код -> отображение файла стерео .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);

person Wawan Ma-chun    schedule 28.05.2013    source источник


Ответы (2)


Это зависит от установленной и доступной памяти (помимо других факторов, таких как версия ОС (лучше семь), версия ОС (лучше 64 бита), количество уже выделенных растровых изображений).

Если вы столкнулись с этой проблемой и не можете решить ее с помощью дополнительных аппаратных средств, вам следует разделить изображение на несколько дополнительных изображений и изменить размер вывода на что-то более эквивалентное стандартному разрешению монитора.

person Qsebas    schedule 28.05.2013
comment
есть ли другой способ сделать то, что я хотел, без замены оборудования? - person Wawan Ma-chun; 29.05.2013
comment
Как я уже предлагал, изменение размера растрового изображения памяти до чего-то более эквивалентного нормальному разрешению экрана, например, если у вас есть изображение (ширина) в 1.000.000 пикселей, но вы покажете его в форме, поскольку типичный экран больше не имеет чем 2.000 пикселей, лучше масштабировать изображение до 2.000 пикселей и хранить его в памяти - person Qsebas; 30.05.2013

Добавьте компонент TImage в TScrollBox, установите параметр AutoSize в TImage и используйте [MaxInt], чтобы получить максимальное значение для вашего Integer.

Image1.AutoSize := true;

была указана проблема [AutoSize] в большом файле, который я пытался отобразить, когда играл с этим проектом .. https://community.embarcadero.com/blogs/entry/converting-to-grayscale-with-tbitmapscanline-property-39051

Пример MaxInt из .. https://community.embarcadero.com/blogs/entry/converting-to-grayscale-with-tbitmapscanline-property-39051 - [uBitmapUtils.pas]

TBGR32 = packed record
  B, G, R, A: Byte;
end;
TBGR32Array = packed array[0..MaxInt div SizeOf(TBGR32)-1] of TBGR32;
PBGR32Array = ^TBGR32Array;
person Joseph Poirier    schedule 18.01.2017
comment
Я не понимал, что 8-байтовый вариант для LongInt применим только к 64-битной iOS, что также означает структуру FMX. спасибо за указание на это. - person Joseph Poirier; 18.01.2017