Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

почему ошибка при загрузке в масив большого числа битмапов?   Найти похожие ветки 

 
delphiForever   (2007-09-04 17:50) [0]

вот например код

n:=100;
for i:=0 to n do begin
arBm[i]:=TBitMap.Create;
arBm[i].LoadFromFile(IntToStr(i)+"file.bmp");
end;

в результате ошибка "Canvas not allow drawing". Практически n может быть больше или меньше, кажется вроде есть зависимость от железа.


 
Ega23 ©   (2007-09-04 17:52) [1]

А это точно bmp?
А может какой-нить альфа-канал присутствует?


 
Dib@zol ©   (2007-09-04 17:57) [2]

> [0] delphiForever   (04.09.07 17:50)

В том то и дело, что памяти не хватает. По крайней мере у меня такое выдавалось лишь по этой причине.


 
delphiForever   (2007-09-04 18:12) [3]


> В том то и дело, что памяти не хватает

а если загрузить пару файлов большого размер получиться памяти нужно в несколько раз больше чем 100 маленьких файлов, а ошибка не вылетает?
И кажется уже не помню ошибка себя покажет даже если ничего не грузить, а просто в цикле попытаться после создания битмапа изменить его размеры


arBm[i].width:=1;
arBm[i].height:=1;


 
umbra ©   (2007-09-04 18:12) [4]

а где рисование в приведенном коде?


 
delphiForever   (2007-09-04 18:14) [5]


> а где рисование в приведенном коде?

рисовать уже не успеваеш...


 
Dib@zol ©   (2007-09-04 18:15) [6]

> [3] delphiForever   (04.09.07 18:12)

Памяти не хватает не под сами битмапы, а под их хендлы в системе. потому и "доез нот аллов"...


 
delphiForever   (2007-09-04 18:19) [7]


> Памяти не хватает не под сами битмапы, а под их хендлы в
> системе. потому и "доез нот аллов"...

а разве хендл жрет много ресурсов


 
Dib@zol ©   (2007-09-04 18:21) [8]

Неа, просто в системе существует лимит хендлов.


 
delphiForever   (2007-09-04 18:25) [9]


> Неа, просто в системе существует лимит хендлов.

ну спасиба разрулил тему а то уже год спокойно спать не мог :)


 
Инс ©   (2007-09-04 18:36) [10]


> delphiForever   (04.09.07 17:50)

Вообще, телепаты из отпуска не вернулись еще, но подобная ошибка чаще всего возникает при огромном количестве gdi-объектов, как здесь
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=11868
или возможно вы обращаетесь к VCL из неосновного потока.


 
Anatoly Podgoretsky ©   (2007-09-04 19:44) [11]

> delphiForever  (04.09.2007 17:50:00)  [0]

Ошибка не здесь


 
delphiForever   (2007-09-04 19:48) [12]


> Anatoly Podgoretsky ©   (04.09.07 19:44) [11]
> Ошибка не здесь


тогда что?


 
Loginov Dmitry ©   (2007-09-04 21:14) [13]

> Ошибка не здесь


+1

100 - это далеко не лимит для битмаповских хэндлов. В Win98 лимит около 300 хэндлов на процесс. В WinXP - около 9000 на процесс. А 100 - это мелочь. Скорее всего, что-нить с потоками перемудрил...


 
delphiForever   (2007-09-04 21:38) [14]


> 100

100 ето так в переносном смысле, что бы было понятно проблему.


> В Win98 лимит около 300 хэндлов на процесс. В WinXP - около
> 9000 на процесс. А 100 - это мелочь

в принцыпе согласен в Xp работает дольше, у меня:
Win98 цыкл летел где-то на 170 кругу и выше
WinXp где-то около 600-1000


> Скорее всего, что-нить с потоками перемудрил...

потоков вообще нет новый проект, форма и громадная кнопка с кодом:
n:=100;
for i:=0 to n do begin
arBm[i]:=TBitMap.Create;
arBm[i].LoadFromFile(IntToStr(i)+"file.bmp");
end;


 
Anatoly Podgoretsky ©   (2007-09-04 21:55) [15]

> delphiForever  (04.09.2007 21:38:14)  [14]

Этот код не откомпилируется, значит это не весь код.


 
delphiForever   (2007-09-04 23:09) [16]


> Этот код не откомпилируется, значит это не весь код.

ну вот весь код, прям чудеса, проверил все без ошибок, раньше таким самим способом пытался загрузить картинки для анимации, правда поменьше и в результате получал ошибку примерно один раз с трех

var
 Form1: TForm1;
 arBm:array of TBitMap;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
begin
 SetLength(arBm,0);
 for i:=0 to 7050 do begin
 SetLength(arBm,Length(arBm)+1);
 arBm[i]:=TBitMap.Create;
 arBm[i].LoadFromFile("2.bmp");
 form1.Caption:=InttoStr(i);
 form1.Canvas.Draw(0,0,arBm[i]);
 end;
end;


 
Anatoly Podgoretsky ©   (2007-09-04 23:15) [17]

О как подрасло, сразу в 70 раз.
А вот размеры битмапа остались загадкой.
Уже и рисование появилось.
И сколько памяти тратится по диспетчеру задач?
Прямо партизан какой то.


 
delphiForever   (2007-09-04 23:19) [18]


> А вот размеры битмапа остались загадкой.

85*120

> Прямо партизан какой то.

ето от дедушки



Страницы: 1 вся ветка

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
3-1180000443
TCrash
2007-05-24 13:54
2007.09.30
IB expert & *.fdb


2-1188729507
MAXHo
2007-09-02 14:38
2007.09.30
Сохранение страниц в TWebBrowser


2-1188984903
kyro
2007-09-05 13:35
2007.09.30
Можно ли сделать сортировку в тейбл


2-1189019937
malyar
2007-09-05 23:18
2007.09.30
масивы


15-1188279753
SerJaNT
2007-08-28 09:42
2007.09.30
Разрешение и частота обновления экрана в Ubuntu 7.04